Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Python 为什么';打印';可以给出一个精确的值,而其他的则不能?_Python_Python 2.7_Math - Fatal编程技术网

Python 为什么';打印';可以给出一个精确的值,而其他的则不能?

Python 为什么';打印';可以给出一个精确的值,而其他的则不能?,python,python-2.7,math,Python,Python 2.7,Math,这似乎很清楚,但为什么当我使用print时,答案不是0.150000000000002?首先,浮点数学并不精确,因为大多数浮点数字不能用float精确表示 因此,0.1+0.15的值并不完全是0.25,而是一些非常接近它的数字 print给出一个看似精确的结果的原因是,它使用str来获得结果,这是一种用户友好的字符串表示形式 >>> 0.1 + 0.05 0.15000000000000002 另一方面,Python解释器使用repr,这为您提供了as代码字符串表示: &g

这似乎很清楚,但为什么当我使用
print
时,答案不是
0.150000000000002

首先,浮点数学并不精确,因为大多数浮点数字不能用
float
精确表示

因此,
0.1+0.15
的值并不完全是
0.25
,而是一些非常接近它的数字


print
给出一个看似精确的结果的原因是,它使用
str
来获得结果,这是一种用户友好的字符串表示形式

>>> 0.1 + 0.05
0.15000000000000002
另一方面,Python解释器使用
repr
,这为您提供了as代码字符串表示:

>>> str(0.1 + 0.05)
'0.15'

首先,浮点数学不是精确的,因为大多数浮点数字不能用
float
精确表示

因此,
0.1+0.15
的值并不完全是
0.25
,而是一些非常接近它的数字


print
给出一个看似精确的结果的原因是,它使用
str
来获得结果,这是一种用户友好的字符串表示形式

>>> 0.1 + 0.05
0.15000000000000002
另一方面,Python解释器使用
repr
,这为您提供了as代码字符串表示:

>>> str(0.1 + 0.05)
'0.15'

这是因为
print
在引擎盖下调用float的
\uuu str\uuuuu
方法,出于某种原因,float上的
\uu str\uuuu
进行舍入。

这是因为
print
在引擎盖下调用float的
\uu str uuuuuu
方法,出于某种原因,float上的
\uu str uuuuu
进行舍入。

你说的是什么意思“当我使用打印时,答案不是0.150000000000002”?在这里。你说“当我使用打印时,答案不是0.150000000000002”是什么意思"? 它就在这里。你不会真的想让
\uuuuu str\uuuuuuu
不旋转吧?如果没有任何舍入,
1/100.0
将打印为
0.010000000000208166817117216851132943093776702880859375
,例如。@MarkDickinson,这有什么错?你宁愿撒谎也不愿说实话?隐式舍入至少令人困惑。更不用说Python没有遵循它自己的禅宗:“显式比隐式好”。它的错误在于它为小浮点数或大浮点数生成了大量的数字。例如,为
1e-300
存储的真值如果准确写入,则给出长度为756的字符串(750位、指数和小数点)。所以,是的,根据禅宗的精神:“实用战胜纯洁”,显示所有750个数字是不切实际的。你不会真的希望
\uuuu str\uuuu
不舍入,是吗?如果没有任何舍入,
1/100.0
将打印为
0.010000000000208166817117216851132943093776702880859375
,例如。@MarkDickinson,这有什么错?你宁愿撒谎也不愿说实话?隐式舍入至少令人困惑。更不用说Python没有遵循它自己的禅宗:“显式比隐式好”。它的错误在于它为小浮点数或大浮点数生成了大量的数字。例如,为
1e-300
存储的真值如果准确写入,则给出长度为756的字符串(750位、指数和小数点)。所以,是的,根据禅宗的精神:“实用战胜纯洁”,而且显示所有750个数字是不切实际的。