我只是使用 PHP Laravel 作为 API 来简单地增加浮点数,如下面的代码;代码:public function testArrIncrement(){ $arr["test"]["words"] = "The quick brown fox jumps over a lazy dog"; $arr["test"]["number"] = 0; for($i=0; $i<11; $i++) $arr["test"]["number"] += 0.01; return response()->json($arr, 200);}结果:{ "test": { "words": "The quick brown fox jumps over a lazy dog", "number": 0.10999999999999999 }}奇怪的是,为什么 $arr["test"]["number"] 的值不是 0.11,而是 0.10999999999999999?但是,如果我只使用没有任何框架的普通单文件 PHP 尝试相同的代码,则一切正常 $arr["test"]["number"] 的值确实是 0.11。代码:$arr["test"]["words"] = "The quick brown fox jumps over a lazy dog";$arr["test"]["number"] = 0;for($i=0; $i<11; $i++) $arr["test"]["number"] += 0.01;var_dump($arr);结果:array(1) { ["test"]=> array(2) { ["words"]=> string(41) "The quick brown fox jumps over a lazy dog" ["number"]=> float(0.11) } }请帮忙为什么会这样??
1 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
这是由于数据被编码成json。如果您尝试,json_encode您将遇到预期的相同行为。php.ini您必须像这样在代码中或代码中设置精度:
public function testArrIncrement(){
ini_set('serialize_precision', 14);
$arr["test"]["words"] = "The quick brown fox jumps over a lazy dog";
$arr["test"]["number"] = 0;
for($i=0; $i<11; $i++) $arr["test"]["number"] += 0.01;
return response()->json($arr, 200);
}
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消