10000-100时,结果应为9900。
我在使用时尝试过: -
< ?php
$num1 = number_format(round(10000,1),2);
$num2 = number_format(round(100,1),2);
echo $num1 - $num2;
?>
上面的结果是-90,这让我意识到number_format函数不适用于计算。
有没有办法可以将number_format的值(从上一页的POST中获取)转换回正常计算的数值?
答案 0 :(得分:5)
首先,原因是:
(int) "10,000.00"
解析为10,因为它停止在第一个非数字字符处进行解析。感谢PHP的奇怪类型系统,当你减去字符串时,这是隐式完成的。
是的,您可以轻松删除逗号:
$unformatted = str_replace(",", "", $formatted);
但是发布原始数值更简洁(您仍然可以使用number_format
作为显示的值)。
编辑:优良作法是使用强制转换((int)
或(float)
)或函数版本({{1})将数字字符串(不带逗号)显式转换为float(或int) }或intval
)。
答案 1 :(得分:0)
我认为你不能用等式中的逗号执行此10,000.00 -100.00
。只需执行原始算术运算 ,然后格式化答案 。
$num1 = 10000;
$num2 = 100;
echo number_format(round($num1 - $num2,1),2);
此输出
9,900.00
答案 2 :(得分:0)
有一种更简单的方法。
number_format用于输出数字或简化数字。 number_format使我们有能力制作完美的圆形数字,以获得更好的用户体验。 要在MYSQL数据库中计算和保存Numbers,请使用此命令。
将您的Numbers保存在MYSQL中,始终为DECIMAL类型而不是FLOAT类型。如果你想用FLOAT字段计算,会有很多错误。
比使用英文符号。
$number = 1234.56;
// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', ''); //
// 1234.57
现在你可以计算并保存它,没有任何错误。 永远记住自己,将数字保存到$ var始终是一个字符串。 是的,你可以定义类型,但在第一种情况下它并不重要,而且很难在这里解释。
有关number_format的更多信息,请参阅此处 - &gt; http://php.net/manual/en/function.number-format.php