我正在使用 Python 对统计物理建模,所以我将处理小数字。
例如,
a = 2.22e-300, b = 3e-200
我想计算
a * b = 6.66e-500.
但是,在 Python 3 中,它显示为 0.0。
我正在考虑设计一种数据类型:第一部分存储浮点数,这里是6.66,第二部分存储幅度,即-500。
请问我该如何实现这个?或者有没有更好的方法来处理科学数字?
最佳答案
创建一个类:
class Sci_note:
def __init__(self, base, exp):
self.base = base
self.exp = exp
def __mul__(self, other):
return Sci_note(self.base * other.base,
self.exp + other.exp)
def __str__(self):
return str(self.base) + 'e' + str(self.exp)
它的功能与您期望的一样:
>>> a = Sci_note(2.22, -300)
>>> b = Sci_note(3, -200)
>>> c = a * b
>>> c.base
6.66
>>> c.exp
-500
更新
我添加了
__str__
方法(上),因此它们在打印时可以正确显示:>>> print(a)
2.22e-300
当然,我这里只实现了乘法的方法,但其他的我会在需要的时候由你来实现。可能你只需要乘法,所以如果我现在写它们会浪费大家的时间!
此外,创建
__float__
处理程序在这里也没有用,因为 Python 无法处理 ^-300
顺序的浮点数, 所以返回它们是没有用的,因为我们只会得到 0
!
关于python-3.x - 如何以科学计数法计算和存储数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49602835/