因此,当使用浮点时,货币/货币有很多问题。在python中decimal
似乎用于货币库,但根据python docs,decimal
是基于浮点的。那么这怎么会没有同样的问题呢
上下文 许多货币库以整数(美元的美分,而不是美元)来度量货币价值。我们刚刚遇到了一个python应用程序的问题,该应用程序将其货币表示为十进制,并将其转换为javascript,然后需要将其转换为整数以用于另一个服务
10.05/100,变成1050.0000…1,当然不是整数。所以我当然想知道为什么python会选择这条路线,因为我看到的大多数建议都建议将金钱视为整数
您将二进制浮点与十进制浮点混淆。从module documentation开始:
(我的粗体强调)
浮点方面是指指数的可变性;数字
12300000
可以表示为123,十进制指数为5(10**5)。float
和decimal
都使用浮点表示。但是float
加上许多二进制分数(1/2+1/4+1/8+1/16+…),而使得它们不适合以二进制分数表示货币,因此不能精确地建模1/100或1/10,因为货币值往往使用很多{a2}you链接还向您介绍Java{a3}。Python的
decimal
本质上是相同的东西;当BigDecimal
文档讨论值由任意精度整数未标度值和32位整数标度组成时,标度基本上是浮点的位置因为
decimal
可以精确地表示货币值的百分之一(美分),所以它更适合对货币值进行建模十进制避免了二进制浮点的一些问题,但不是全部,甚至可能不是大部分
实际问题不是浮点而是数字格式。没有数字格式可以表示所有实数,甚至所有有理数,因此没有数字格式可以处理我们想要对数字执行的所有操作
货币通常用货币单位的小数表示。例如,美元和许多其他货币的“分”是一美元的百分之一。十进制格式可以精确表示1/100th。无法使用二进制格式。因此,使用十进制格式,您可以:
但是,在尝试以下操作时会出现问题:
对于如何进行数值计算,没有通用的解决方案。利用教科书、课程和研究论文研究数值计算及其误差。所以你不能仅仅通过选择一种格式来解决数值问题。了解您使用的任何格式、使用时出现的错误、如何处理这些错误以及需要实现的结果都很重要
十进制类型允许十进制浮点而不是二进制浮点。你所指的问题类别与后者有关
相关问题 更多 >
编程相关推荐