php 浮点计算 2 小数点

2022-08-30 14:41:57

有一个数学计算问题。

$a = 34.56

$b = 34.55

$a做一些计算得到这个数字

$b正在四舍五入到最接近的0.05以获得此数字

发生的事情是

$c = $b - $a

据说它是-0.01,但我回声了,它显示-0.00988888888888$c

我尝试使用,但输出是0.00,number_format($c, 2)

我怎么能确保和正好是2个小数,后面没有隐藏的数字。$a$b

在我的php知识中,只能格式化显示,但值并不是真正的2位小数,number_format

我希望我能从这里得到帮助。这真的让我感到沮丧。


答案 1

尝试冲刺("%.2f", $c);

浮点数以基于 2 的幂的 IEEE 表示法表示,因此终止十进制数可能不是终止二进制数,这就是获取尾随数字的原因。

正如可变长度编码器所建议的那样,如果您知道所需的精度并且它不会改变(例如,当您处理金钱时),则最好只使用固定点数,即将数字表示为美分而不是美元

$a = 3456;

$b = 3455;

$c = $b - $a;

sprintf ("%.2f", $c/100.0);

这样,如果您在打印前进行大量计算,则不会有任何舍入错误。


答案 2

使用 round()

$c = round($b - $a, 2);

注意:您也可以根据需要选择舍入模式。

编辑:好吧,我不明白在做什么,这不是:sprintf()number_format()

$c = number_format($b - $a, 2);

$c = sprintf("%.2f", $b - $a);

?


推荐