如何以科学计数法计算和存储数字?
How to calculate and store the number in scientific notation?
我正在使用 Python 来模拟统计物理,所以我会处理小数字。
例如,
a = 2.22e-300, b = 3e-200
我想计算
a * b = 6.66e-500.
然而,在 Python 3 中显示 0.0。
我想设计一个数据类型:第一部分存储浮点数,这里是6.66,第二部分存储量级,也就是-500。
请问如何实现?或者有什么更好的方法来处理科学数字?
我强烈建议您使用 built-in decimal
模块之类的东西,并根据您的需要提高其精度。例如:
>>> from decimal import *
>>> getcontext().prec = 100
>>> a = Decimal("2.22e-300")
>>> b = Decimal("3e-200")
>>> a
Decimal('2.22E-300')
>>> b
Decimal('3E-200')
>>> a*b
Decimal('6.66E-500')
请注意,为了安全起见,我使用 字符串 创建了 a
和 b
,例如 "3e-200"
让decimal
模块正确解析它们。如果不是,它将首先将它们转换为 Python 的不精确浮点数,并在将它们传递给 Decimal
对象之前将它们弄乱。
在上面的代码中,我们将精度设置为 100。
创建 class:
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
,所以 return 它们是没有用的,因为我们只会得到 0
!
我正在使用 Python 来模拟统计物理,所以我会处理小数字。
例如,
a = 2.22e-300, b = 3e-200
我想计算
a * b = 6.66e-500.
然而,在 Python 3 中显示 0.0。
我想设计一个数据类型:第一部分存储浮点数,这里是6.66,第二部分存储量级,也就是-500。
请问如何实现?或者有什么更好的方法来处理科学数字?
我强烈建议您使用 built-in decimal
模块之类的东西,并根据您的需要提高其精度。例如:
>>> from decimal import *
>>> getcontext().prec = 100
>>> a = Decimal("2.22e-300")
>>> b = Decimal("3e-200")
>>> a
Decimal('2.22E-300')
>>> b
Decimal('3E-200')
>>> a*b
Decimal('6.66E-500')
请注意,为了安全起见,我使用 字符串 创建了 a
和 b
,例如 "3e-200"
让decimal
模块正确解析它们。如果不是,它将首先将它们转换为 Python 的不精确浮点数,并在将它们传递给 Decimal
对象之前将它们弄乱。
在上面的代码中,我们将精度设置为 100。
创建 class:
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
,所以 return 它们是没有用的,因为我们只会得到 0
!