为什么0.2在使用小数法时不等于0.2?
Why 0.2 is not equal to 0.2 when using the decimal method?
我还是Python的初学者,使用Python中内置的小数法,有点“偏”了。
代码如下:
import decimal
print(decimal.Decimal(0.02))
这是输出:
0.0200000000000000004163336342344337026588618755340576171875
我开始怀疑,这怎么可能? 0.02
不是 0.0200000000000000004163336342344337026588618755340576171875
,但 decimal
模块将 0.02
视为 0.0200000000000000004163336342344337026588618755340576171875
。十进制模块有问题,还是我做错了什么?
如果您的输入已经是浮点数,Decimal
方法将无能为力,它不会对其进行舍入。
Decimal
不这样做的唯一方法,它需要一个字符串:
print(decimal.Decimal("0.02"))
decimal 模块使用大多数人熟悉的模型实现定点和浮点运算,而不是大多数计算机硬件实现的 IEEE 浮点版本。 Decimal 实例可以精确表示任何数字,向上或向下舍入,并对有效数字的数量应用限制。
Decimal 值表示为 Decimal class 的实例。 构造函数将整数或字符串作为参数。浮点数在用于创建 Decimal 之前必须转换为字符串,让调用者明确处理无法使用硬件浮点表示法准确表达的值的位数。
因此,在您的情况下,请将字符串作为 Decimal 方法的输入传递。希望这有帮助。
import decimal
print(decimal.Decimal('0.02'))
我还是Python的初学者,使用Python中内置的小数法,有点“偏”了。
代码如下:
import decimal
print(decimal.Decimal(0.02))
这是输出:
0.0200000000000000004163336342344337026588618755340576171875
我开始怀疑,这怎么可能? 0.02
不是 0.0200000000000000004163336342344337026588618755340576171875
,但 decimal
模块将 0.02
视为 0.0200000000000000004163336342344337026588618755340576171875
。十进制模块有问题,还是我做错了什么?
如果您的输入已经是浮点数,Decimal
方法将无能为力,它不会对其进行舍入。
Decimal
不这样做的唯一方法,它需要一个字符串:
print(decimal.Decimal("0.02"))
decimal 模块使用大多数人熟悉的模型实现定点和浮点运算,而不是大多数计算机硬件实现的 IEEE 浮点版本。 Decimal 实例可以精确表示任何数字,向上或向下舍入,并对有效数字的数量应用限制。
Decimal 值表示为 Decimal class 的实例。 构造函数将整数或字符串作为参数。浮点数在用于创建 Decimal 之前必须转换为字符串,让调用者明确处理无法使用硬件浮点表示法准确表达的值的位数。
因此,在您的情况下,请将字符串作为 Decimal 方法的输入传递。希望这有帮助。
import decimal
print(decimal.Decimal('0.02'))