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

在 PHP 中处理货币 - 小数位和 number_format()

number_format 中的 number_format 不起作用

十进制的number_format问题[关闭]

PHP - number_format 浮点数 [重复]

php number_format() 的问题