猿问

奇怪的浮点数增量结果,用 PHP Laravel API

我只是使用 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) } }

请帮忙为什么会这样??


湖上湖
浏览 92回答 1
1回答

qq_笑_17

这是由于数据被编码成json。如果您尝试,json_encode您将遇到预期的相同行为。php.ini您必须像这样在代码中或代码中设置精度:public function testArrIncrement(){&nbsp; &nbsp; ini_set('serialize_precision', 14);&nbsp; &nbsp; $arr["test"]["words"] = "The quick brown fox jumps over a lazy dog";&nbsp; &nbsp; $arr["test"]["number"] = 0;&nbsp; &nbsp; for($i=0; $i<11; $i++) $arr["test"]["number"] += 0.01;&nbsp; &nbsp; return response()->json($arr, 200);}
随时随地看视频慕课网APP
我要回答