Python小数

Python小数,python,floating-point,decimal,rounding-error,Python,Floating Point,Decimal,Rounding Error,我预计0.5到1。有人能解释为什么它取而代之的是0吗 您要求精度的有效数字为零。如果不允许存储任何数字,则所有数字都将为零 请注意,精度是有效小数位数,即不计算前导零。0.5有一个有效位,1.5有两个有效位。还请注意,十进制使用。您要求精度的有效数字为零。如果不允许存储任何数字,则所有数字都将为零 请注意,精度是有效小数位数,即不计算前导零。0.5有一个有效位,1.5有两个有效位。还要注意十进制使用。如果要将精度设置为0,请尝试将其设置为1或2。如果要将精度设置为0,请尝试将其设置为1或2。如果

我预计0.5到1。有人能解释为什么它取而代之的是0吗


您要求精度的有效数字为零。如果不允许存储任何数字,则所有数字都将为零


请注意,精度是有效小数位数,即不计算前导零。0.5有一个有效位,1.5有两个有效位。还请注意,十进制使用。

您要求精度的有效数字为零。如果不允许存储任何数字,则所有数字都将为零


请注意,精度是有效小数位数,即不计算前导零。0.5有一个有效位,1.5有两个有效位。还要注意十进制使用。

如果要将精度设置为0,请尝试将其设置为1或2。

如果要将精度设置为0,请尝试将其设置为1或2。

如果需要整数,我只需将其转换为int

 int(Decimal(0.5))
您还可以确保具有正确的舍入设置

 getcontext().prec = 0
 getcontext().rounding = ROUND_HALF_UP

如果你想要一个整数,我就转换成int

 int(Decimal(0.5))
您还可以确保具有正确的舍入设置

 getcontext().prec = 0
 getcontext().rounding = ROUND_HALF_UP

我不确定这里的用例是什么,但为什么不这样做:

round(0.5)

我不确定这里的用例是什么,但为什么不这样做:

round(0.5)
在您的:

getcontext.prec()=0
行,您要求的是0位小数-所有小数将以这种方式返回0。尝试:

getcontext.prec()=1
或另一个数字来设置小数位数

祝你好运。

在你的:

getcontext.prec()=0
行,您要求的是0位小数-所有小数将以这种方式返回0。尝试:

getcontext.prec()=1
或另一个数字来设置小数位数


祝你好运。

当我运行此程序时,会出现一个打字错误。您使用的是哪个Python版本?顺便说一句,在本例IIRC中,它不会改变任何东西,将浮点值传递到十进制值就像闯红灯后刹车一样——如果有损坏,它已经完成了。Decimal将只看到有限的精度,可能是四舍五入的浮点,而不是您所说的文字。@larsmans:从Python 2.7开始,Decimal接受浮点数。啊。我这里有Python2.6,这解释了很多。当我运行它时,我得到一个TypeError。您使用的是哪个Python版本?顺便说一句,在本例IIRC中,它不会改变任何东西,将浮点值传递到十进制值就像闯红灯后刹车一样——如果有损坏,它已经完成了。Decimal将只看到有限的精度,可能是四舍五入的浮点,而不是您所说的文字。@larsmans:从Python 2.7开始,Decimal接受浮点数。啊。我这里有Python 2.6,这解释了很多。>>>getcontext.rounding=ROUND\u HALF\u UP>>>+Decimal0.5 Decimal'0'>>getcontext.rounding=ROUND\u HALF\u UP>>>>+Decimal0.5 Decimal'0'