为了账号安全,请及时绑定邮箱和手机立即绑定

在 php 中按字母顺序显示 html li 元素

在 php 中按字母顺序显示 html li 元素

PHP
慕尼黑的夜晚无繁华 2023-03-11 15:27:39
我正在用 php 编写一些代码,我发现了这个问题:$a = 4.60;$b = 5.05; $c = 2.60;$r = ($a + $b + $c) * 0.1;echo "r: $r\n";echo "r sprintf1: " . sprintf("%.2f",$r) . "\n";echo "r sprintf2: " . sprintf("%.2f",1.225) . "\n";输出是:r: 1.225r sprintf1: 1.22r sprintf2: 1.23如您所见,当结果应该相同时,sprintf 的行为有所不同。这是为什么?
查看完整描述

2 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

因为浮点值不精确,用它们做数学运算只会加剧不精确性。


$a = 4.60;

$b = 5.05; 

$c = 2.60;


$r = ($a + $b + $c) * 0.1;


// greatly increase the floating point display precision

ini_set('precision', 30);


var_dump( $a, $b, $c, $r, 1.225 );

输出:


float(4.59999999999999964472863211995)

float(5.04999999999999982236431605997)

float(2.60000000000000008881784197001)

float(1.22499999999999986677323704498)

float(1.22500000000000008881784197001)

这就是为什么你永远不应该使用浮点数来代表金钱。


查看完整回答
反对 回复 2023-03-11
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

当您计算浮点数 ( $r = ($a + $b + $c) * 0.1;) 时,它的结果不完全是 1.225,而是类似于1.22499999999999986677323704498。这就是它发生的原因。

所以永远不要相信浮点数结果的最后一位,也不要直接比较浮点数是否相等。


查看完整回答
反对 回复 2023-03-11
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信