如何在不进行任何舍入的情况下将浮点数转换为小数点后 4 位?

Posted

技术标签:

【中文标题】如何在不进行任何舍入的情况下将浮点数转换为小数点后 4 位?【英文标题】:how to convert a float number to 4 decimal places without any rounding? 【发布时间】:2019-07-31 15:46:16 【问题描述】:

我要取一个整数,然后用sqrt函数将它的根以浮点数打印到小数点后4位,不进行任何舍入;但我有一个问题。例如,当我将 3 作为输入时,输出为 1.7320。它是正确的;但是当我将 4 作为输入时,我希望 2.0000 作为输出;但我看到的是 1.9999。我做错了什么?

import math
num = math.sqrt(float(input())) - 0.00005
print('%.4f' % num)

【问题讨论】:

为什么会令人惊讶? 4 的 sqrt 是 2,2 - 0.000051.99995... this answer to Python 3.x rounding behavior 有帮助吗? 例如,如果您运行print('%.16f' % num),您会看到num 仅比1.99995 小一点。 %.4f 因此跌至 1.9999。我认为this 是开始进一步阅读的正确位置。 【参考方案1】:

查看Round float to x decimals?

该页面的解决方案之一是将您的打印语句替换为:print(format(num, '.4'))

使用现代 f 弦:print(f'num:.4f')

【讨论】:

【参考方案2】:

根据您对 3 的平方根的预期输出,您似乎真的只想将平方根输出截断或扩展到小数点后 4 位(而不是向上或向下舍入)。如果是这种情况,您可以只格式化为 5 个小数位并切掉字符串中的最后一个字符(下面的示例将您的输入替换为硬编码字符串以进行说明)。

import math

n = ':.5f'.format(math.sqrt(float('3')))[:-1]
print(n)
# 1.7320

n = ':.5f'.format(math.sqrt(float('4')))[:-1]
print(n)
# 2.0000

【讨论】:

以上是关于如何在不进行任何舍入的情况下将浮点数转换为小数点后 4 位?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不向上或向下舍入的情况下获得精确的数字[重复]

如何将浮点数打印到 n 位小数,包括尾随 0?

将浮点数与字符串连接并舍入到小数点后 2 位

将浮点数舍入到 N 个小数位

将浮点数转换为字符串而不会丢失精度

如何在不自动舍入的情况下在 SQL Server 中返回具有两位小数的数字