当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获得)转换为正常计算的数值?
首先,原因是:
(int) "10,000.00"
解析为10,因为它在第一个非数字字符处停止解析。由于PHP奇怪的类型系统,这是在减去字符串时隐式完成的。
是的,你可以很容易地去掉逗号:
$unformatted = str_replace(",", "", $formatted);
,但它是干净的,只是张贴原始数值(您仍然可以使用number_format
显示的值)。
编辑:明确地将数字字符串(不带逗号)转换为float(或int),使用强制转换((int)
或(float)
)或函数版本(intval
或floatval
)是很好的做法。
我不认为您可以在等式中使用逗号执行此10,000.00 -100.00
。只需执行原始算术运算,然后格式化答案。
$num1 = 10000;
$num2 = 100;
echo number_format(round($num1 - $num2,1),2);
这个输出9,900.00
有一个更简单的方法。
number_format用于格式化输出数字或舍入简单数字。Number_format使我们能够制作形状良好的四舍五入数字,以获得更好的用户体验。对于计算和保存数字在你的MYSQL数据库使用这个。
保存你的数字在MYSQL总是作为类型DECIMAL而不是FLOAT。如果你想用FLOAT字段来计算,会有很多bug。
然后使用英文符号
$number = 1234.56;
// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', ''); //
// 1234.57
现在你可以计算和保存它,没有任何bug。永远记住,将数字保存到$var中总是一个字符串。是的,你可以定义类型,但在第一种情况下没有关系,在这里解释太长了。
有关number_format的更多信息,请参阅此处-> http://php.net/manual/en/function.number-format.php