数字如何在Python中运行?

时间:2011-11-08 21:56:05

标签: python

所以,我打开终端。

> python
> 1 / 3
0
> 1.0 / 3
0.33333333333333331

有人可以告诉我小数点的规则是什么。分割时哪个数字带小数是否重要?有最好的做法吗?

如果我想要更多小数点或更少的小数点,我是否需要使用函数?

6 个答案:

答案 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中有以下分割行为:

  1. int / int == int
  2. int / float == float
  3. float / int == float
  4. float / float == float
  5. 在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

此运算符的行为不依赖于命令行选项。