Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Golang不增加0.1_Go - Fatal编程技术网

Golang不增加0.1

Golang不增加0.1,go,Go,以下Go代码 对于i:=0.0;i

以下Go代码

对于i:=0.0;i<5;i+=0.1{ 格式打印f%v,i }

结果是这部分输出

0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5
为什么我得到的是0.300000000004而不是0.3?

简短回答: 这与数字在计算机中的存储方式有关


特别是对于GoLang,您可能需要读取二进制浮点数不能精确保存1/10,就像具有有限位数的十进制数不能精确保存1/3一样。当您不断重复添加0.1时,错误累积到足以显示在程序的输出中

解决此问题的最佳方法是使用整数作为循环控制变量,并在每次迭代时从中计算浮点值:

对于i:=1;i<50;i++{ f:=64I/10 格式打印f%v,f }
请注意,我是除以10,而不是乘以0.1,实际上是二进制近似值0.1。

请参阅相关/可能的重复: