所以,我打开终端。
> python
> 1 / 3
0
> 1.0 / 3
0.33333333333333331
有人可以告诉我小数点的规则是什么。分割时哪个数字带小数是否重要?有最好的做法吗?
如果我想要更多小数点或更少的小数点,我是否需要使用函数?
答案 0 :(得分:10)
Python中的划分< 3.0与许多不同的编程语言一样,输出是一个整数:
>>> 3 / 2
1
如果对任何部件使用 float ,输出也将是一个浮点数:
>>> 3.0 / 2
1.5
>>> 3 / 2.0
1.5
但是有一个解决方案,如果你想更准确地进行除法而不需要将一些部分转换成浮点数:
>>> from __future__ import division
>>> 3 / 2
1.5
在上述之后你仍然可以做出经典的划分"使用双斜杠:
>>> 3 // 2
1
足够清楚了吗?它有帮助吗?
答案 1 :(得分:4)
默认情况下,我们在python2中有以下分割行为:
在python3中,行为已经改变,int / int返回float。这也可以通过添加以下导入在python2中启用:
from __future__ import division
你可能已经注意到浮动划分并不准确。最后一位数的小错误可能会偶然发生。这导致了浮点数在硬件级别上的表示方式。您可以阅读more about it on wikipedia。
如果你想在python中进行精确算术,可以使用内置模块decimal
完成:
>>> from decimal import Decimal
>>> Decimal('1') / 3
Decimal('0.3333333333333333333333333333')
也可以改变精度:
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 50
>>> Decimal('1') / 3
Decimal('0.33333333333333333333333333333333333333333333333333')
答案 2 :(得分:1)
规则是如果两个输入数字都是整数(没有小数点),则输出将是整数,否则它将是一个浮点数。浮点精度由您的系统定义,如果您想要更高的精度,则需要使用库。 Google arbitrary precision math python
。
如果你想要分割两个文字整数并得到一个浮点数,那么你给小数点指定哪一个并不重要,并且没有约定。这是非常罕见的,并不是太多人制定规则的东西。
答案 3 :(得分:0)
在Python 2中,将int除以int总是将结果截断为int。但是,如果一个或两个操作数都是浮点数,那么你的答案就是浮点数。
在选择要显示的小数点数方面,您可以使用.format
字符串方法(http://docs.python.org/library/string.html#formatspec)。
答案 4 :(得分:0)
标准库decimal
模块提供“一种算法,其工作方式与人们在学校学习的算法相同。”见http://docs.python.org/library/decimal.html
这是关于字符串格式的文档: http://docs.python.org/library/stdtypes.html#string-formatting
答案 5 :(得分:0)
控制可以使用的位数
>>> print("%.10f\n" % 0.4)
0.4000000000
这里我们告诉print显示10位数。有关可用格式的详细信息,请参阅format spec。
分区在python中有点混乱。 /
的行为取决于命令行选项:
$ python -Qnew
>>> 4 / 3
1.3333333333333333
>>> ^D
$ python -Qold
>>> 4 / 3
1
>>>
在新语义中/
总是产生一个浮点数。 在旧版本中,如果两个操作数都是整数,则生成一个int,如果其中至少有一个是浮点数,则生成一个浮点数。检查你的python版本以确定哪一个是你的默认值。要启用新语义,您还可以使用
from __future__ import division
请注意,还有截断除法运算符://
,它将两个数字分开并截断结果,而不管其类型如何。如果参数既是int又是float,如果其中至少有一个是float,则返回一个int。
> 5.0 // 3
1.0
> 5 // 3.0
1.0
> 5 // 3
1
此运算符的行为不依赖于命令行选项。