【问题标题】:Convert a scientific notation to decimal number, and still keeping the data format as float64将科学计数法转换为十进制数,数据格式仍保持为 float64
【发布时间】:2019-10-16 06:53:28
【问题描述】:

我有一个简单的问题。

我正在使用numpy.std 公式来计算标准差。但是,结果是以科学计数法表示的数字。

所以我问,如何将科学记数法转换为十进制数,并且仍然保持数据格式为 float64 ?

或者是否有任何解决方法可以将初始结果作为十进制数?

这样的解决方案:

stdev = format(stdev, '.10f')

将数据转换成我不想要的字符串对象。

这是我的代码:

stdev = numpy.std(dataset)
print(stdev)

结果:4.999999999999449e-05

print(stdev.dtype)

结果:float64

预期结果

我愿意将结果作为 float64 格式的十进制数。

【问题讨论】:

  • 科学记数法是一种显示方式,不是实际数字。 0.00005 显示为“5e-05”。您可以使用打印格式来控制显示,例如:"%f"%0.00005。查看np.set_printoptions 的文档,了解如何控制 numpy 数组的显示。

标签: python numpy casting precision


【解决方案1】:

我想这只是一个表示问题,因为正如您所展示的,数据类型仍然是 float64。

如果正确,您可以打印为格式化字符串:

>>> x = 123456789e-15
>>> print(x)
1.23456789e-07

>>> print("{:.15f}".format(x))
0.000000123456789

.15f 指定您需要 15 位小数的浮点格式。

从 python 3.6 开始,您可以使用 f-string 格式:

print(f"{x:.15f}")
0.000000123456789

看看string format documentation

【讨论】:

  • print("{:.15f}".format(x)) 这个命令可以创建一个没有字符串规范的十进制数的立即输出。但是,当我将此输出分配给诸如 y 之类的变量时,例如:y="{:.15f}".format(x) y 对象不再是浮动的。它变成了一个字符串。
  • 那我恐怕不明白你的问题。当你打印一个浮点数时,它会被 python 转换为一个字符串,所以你总是会看到一个字符串被打印出来。根据小数位数,它可能会以科学计数法打印(请参阅stackoverflow.com/questions/24187684/…)。然而,浮点数在内存中的存储方式并不取决于您如何看待它被 print 函数打印出来。
【解决方案2】:

您混淆了表示和内部存储。默认情况下,Python 将以科学形式显示该值。您可以强制使用另一种表示形式 - 但您不能影响值本身。

Vanilla Python 没有 float64 的概念(它对于精确计算不是那么好) - 但 numpy

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多