【问题标题】:limited float decimal point without rounding the number [duplicate]有限浮点小数点不四舍五入[重复]
【发布时间】:2018-10-25 20:32:13
【问题描述】:

我想将一个数字转换为带有 3 个小数点的浮点数,但我希望它不四舍五入。 例如:

a = 12.341661
print("%.3f" % a)

此代码返回此数字:

12.342

但我需要原始号码,我需要这个:

12.341

我编写了一个代码,接收来自用户的数字并将其转换为浮点数。 我不知道用户输入的数字是多少。

【问题讨论】:

  • 您可以使用字符串操作而不是将其视为数字。
  • 我搜索堆栈溢出但找不到我的答案。我发现只是关于如何截断,但我的 Q 是如何在不四舍五入的情况下截断。

标签: python floating-point numbers rounding decimal-point


【解决方案1】:

我的第一个想法是将print("%.3f" % a) 更改为print("%.3f" % (a-0.0005)),但这并不完全奏效:虽然它输出你想要的a=12.341661,但如果a=12.341 它输出12.340,这显然是不对的。

相反,我建议使用int() 明确地做地板:

a = 12.341661
b = int(a*1000)/1000.
print(b)

这会输出你想要的:

12.341

即使输入的小数少,也可以输出 3 位小数,您可以格式化输出:

a = 3.1
b = int(a*1000)/1000.
print("%.3f" % b)

输出:

3.100

【讨论】:

  • 这很好,但如果用户输入 1.1,代码也会返回 1.1。但我想要 3 位小数意味着 1.100
  • 刚刚更新了我的答案以始终输出 3 位小数。
【解决方案2】:

尝试 str 和切片

a = 12.341661
b = str(int(a))
c = str(a - int(a))[1:5]
d = b + c
print(d)

【讨论】:

  • 我不知道用户输入的数字是多少。可能是输入 10 位数字的数字。例如:12023.1288767
  • 我编辑了我的帖子,向您展示如何获取小数点前的数字和小数点后的 3 位数字
  • 不适用于负数。
  • 我的意见都是正面的。我认为这是对我的 Q 的最佳回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多