Skip to main content
 首页 » 编程设计

Python Decimal 与 C# decimal 精度

2025年05月04日11mfryf

<分区>

我知道这个问题已经被问过很多次了,我也看过很多博客和 SO 答案,但这个问题让我抓狂。我只想将一个两位小数乘以 100,这样我就去掉了它的小数:

>>> 4321.90 * 100 
432189.99999999994 
>>> Decimal(4321.90) * Decimal(100) 
Decimal('432189.9999999999636202119291') 

对于这种看似微不足道的操作,我不敢使用舍入。会安全吗?如果精度问题给我带来了麻烦,结果接近 xxx.5 怎么办?那会发生吗?我确实理解二进制级别的问题,但我来自 C#,我对 .Net 的 decimal 类型没有这个问题:

decimal x = 4321.90m; 
decimal y = 100m; 
Console.WriteLine(x * y); 
432190,00 

我认为 Python 的 decimal 模块应该可以解决这个问题。我正准备将初始值转换为字符串并使用字符串操作进行数学运算,对此我感到很遗憾...