number_format 和负数的问题
Posted
技术标签:
【中文标题】number_format 和负数的问题【英文标题】:problems with number_format and negative numbers 【发布时间】:2011-06-21 17:32:49 【问题描述】:现在我在我的数据库中将数字存储为 double(11,3)。有些数字可能是更大的负数。我现在玩的是-3000.000
当我仅在 3000.000 上使用 number_format 时,它返回 3,000 当我在 -3000.000 上使用 number_format 时,它返回 -3
任何想法为什么会发生这种情况以及我可以做些什么来解决它?我现在有点不知所措,为什么会发生这种情况。
谢谢,
杰夫
编辑:我让它与以下代码一起工作:
$number = abs($row['Amount']) * -1; $final = number_format($number,2);
现在为什么这会起作用而不是:
$final = number_format($row['Amount'],2);
我没有头绪,但至少我找到了解决方案,谢谢你的帮助:)
【问题讨论】:
这个php -R 'echo number_format(-3000.000);'
返回-3,000
。你能确认数据库发送的信息是正确的吗?
哪个 DBMS?在某些 PHP 版本中存在一些关于某些数据库的错误 - PHP 未正确检索某些数值。
刚刚这样做:echo number_format(3000.000,2) * -1;并得到-3...我不明白这里出了什么问题。
【参考方案1】:
试试这个:
if($input<0)
$number = abs($input);
$result = number_format($number) * -1;
else
$result = number_format($input);
【讨论】:
即使这样我仍然得到 3: echo number_format(3000.000,2) * -1;我不明白发生了什么...... 见@salathe。您正在获取一个字符串并将其乘以 -1。"3,000"
中的逗号将导致数学运算为 3 * -1
。
建议的代码将不工作,因为"3,000.00" * -1
导致字符串在乘法之前得到类型杂乱(到3
)。
是的,我想通了,但我选择了他/她的答案作为正确的答案,因为它确实让我找到了答案:)
所以您将错误答案标记为正确...我认为更准确的选择是编写您自己的正确答案并将其标记为正确。这将出现在互联网上,并可能在未来几年误导许多人。【参考方案2】:
number_format(-3000.000, 2)
的结果是 字符串,"-3,000.00"
。
如果您不明白,请使用重现您问题的代码更新问题。
【讨论】:
【参考方案3】:首先确保您的号码从数据库中提取为 -3000。否则以前的答案和 cmets 都很好。
【讨论】:
是的,这就是我来这里的原因。我已经让 Shameer 的版本工作了,但仍有一个 bug 需要解决。【参考方案4】:根据Shameer的建议,我得出了这个解决方案。
将返回负值的尾随零(可能如预期的那样):
if($input < 0)
return number_format(0-abs($input), 2, ',', '');
else
return number_format((float)$input, 2, ',', '');
【讨论】:
以上是关于number_format 和负数的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中处理货币 - 小数位和 number_format()