你好,我正在处理很多这样的数字:0.00000005,0.000341,3423.52322154。基本上是比特币和altcoin数字。
现在我知道如果我在python中这样做
>>> 0.1 + 0.2
0.30000000000000004
这是不正确的,我可以str我的变量,并把它们放在十进制模块中来修正它。我的问题是,我不知道什么时候float足够好,因为我可能有点孤独症,当谈到性能和理解我在做什么时,我在想,我可能在不需要十进制模块的时候使用得太多了。
当我在做数学的时候,我怎么知道我什么时候需要使用十进制呢?
编辑:好吧,很多人都认为,因为我在处理比特币和altcoin数字,所以我想计算它来购买确切的金额或其他任何东西,但对我来说,情况并非总是如此。我还想每秒取200个数字,快速计算出amount*rate以便于显示,也许float可以足够好。我想对于这些问题没有简单的答案(我想我必须阅读数字的二进制表示法等等)。
也有人建议我把数字表示为整数,然后存储小数位,然后在计算后放回原处。我不知道这是否比十进制快?
如果它需要非常精确,你不应该真的使用浮动。相反,您应该存储两个整数,一个包含不带小数点的数字,另一个显示在显示或其他内容时应该分成多少个小数位。
float可能有用的时间是,当您执行小数点后3位或4位以内的操作时,您可以在每次计算后使用round函数将所需的小数位数舍入。在
Python有语言附带的
decimal
模块:虽然它在技术上是“浮点”,但它实际上处理的是十进制数,直到指定的数字精度。在因此,使用小数点后的18个左右的数字是可能的,一些加密货币使用的(比如以太坊)由于基数偏移或舍入而引入了零误差。在
这看起来可能是人为的,因为Decimal实例必须从字符串中构造,但这只是为了避免您在第一时间看到的错误。这些对象支持所有的数值运算,并且可以很容易地转换为字符串,而不会出现舍入错误,以便在任何API上使用。在
https://docs.python.org/3/library/decimal.html
相关问题 更多 >
编程相关推荐