python-3.x - 如何以科学计数法计算和存储数字?

标签 python-3.x physics scientific-notation

我正在使用 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/

相关文章:

python - 使用 beautifulsoup 抓取 Reddit 上的嵌套评论

python - 有什么方法可以让 Phusion Passenger 在 Python 3.x 中运行?

python - 无法在 VS Code 中切换到 Python3

ios - iPhone 上最快的反平方根

c - 从文件读取值到数组会导致段错误,C

python - 如何借助数据透视表填充 NaN 值?

c - 三体p‌r‌o‌b‌l‌e‌m(Burrau's pythagorean p‌r‌o‌b‌l‌e‌m.)与Runge-Kutta 4积分法(c语言)

java - 根据用户输入计算运动方程(更短的方法?)

python - 在 Python 中使用 matplotlib 在 semilogy plot 上防止轴采用科学记数法(10 的幂)

python-3.x - 为什么 sklearn 标准化数据的方差不等于 1?