【问题标题】:Round at two decimals小数点后两位
【发布时间】:2017-09-25 14:04:50
【问题描述】:
In [86]: array.std()
Out[86]: 100.70953143681199

In [87]: array.std().round()
Out[87]: 101.0

In [88]: array.std().round(2)
Out[88]: 100.70999999999999

In [89]: array.std().round(decimals=2)
Out[89]: 100.70999999999999

In [90]: np.round(array.std(), decimals=2)
Out[90]: 100.70999999999999

我想将标准差四舍五入到小数点后 2 位,但到目前为止还没有用。我该如何解决?如何使它与numpy 一起使用?

【问题讨论】:

  • int()包围它
  • 如果您想留在numpy,您可以添加astype(),例如array.mean().round().astype(np.int)
  • 为什么要四舍五入std。开发?这纯粹是为了显示/报告目的吗?如果是这样,您想使用字符串格式,而不是数字舍入。 (如果你想在进一步的计算中使用 rounded 值,你应该问自己为什么要不必要地放弃这些计算的准确性。)

标签: python numpy


【解决方案1】:

Python 有一个名为round() 的内置函数;但要得到它你想要的,你需要将std 转换为浮点数。 std_dev = round(float(array.std()), 2) 之类的东西应该可以满足您的需求。

【讨论】:

  • 它有效,但我想用 numpy 进行所有计算。为什么它不适用于 numpy?
  • 看起来这个问题在 SO 上时不时出现。 This comment,以及随后的答案,请注意,您尝试四舍五入的数字没有精确的二进制等价物。
【解决方案2】:

Numpy 在您显示的案例中正确地舍入了数字,但是当数字显示在屏幕上时,您会看到 floating point precision 的结果。如果这种精度损失确实会给您带来问题,那么您应该考虑使用decimal 包。

import decimal
s = decimal.Decimal(100.70953143681199)
s = round(s, 2)
print(s)
# 100.71

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多