我只想显示小数位 "Truncate floats without rounding"

I want to show only the decimal places "Truncate floats without rounding"

到目前为止,我的代码一直显示到小数点后第二位。

res4 = Decimal('%.2f' % (res4 * 100 / 100))

但我遇到了问题

35.3169 --> 35.32

为什么要提出来? 我想把小数点后第三位的所有东西都扔掉。 如果没有第二个小数位,我想做 0。 帮帮兄弟!!!

我不认为这是我发现的方式。

def truncate_number(num, limit):
  int_part, fract_part = str(Decimal(num)).split('.')
  return Decimal(f'{int_part}.{fract_part[:limit]}')

[input] truncate_number(35.3169, 2)
[output] 35.31
[input] truncate_number(31.1, 2)
[output] 31.10
[input] truncate_number(31.4, 2)
[output] 31.39
[input] truncate_number(31.5, 2)
[output] 31.5
[input] truncate_number(30.22, 2)
[output] 30.21

发生了什么... 我要仰望少数。 我想扔掉第三个数字。 而如果没有第二个小数位,我想做0。

*************** 我觉得我需要用这个。 ************

res4 = math.floor(res4 * 1000) / 100
res4_2f='%.2f' % (res4 / 10)
[input] 40.41
[output] 40.41

告诉我建议!

您正在从字符串构造 Decimal。您使用的格式说明符会将值四舍五入。例如:

print('%.2f' % 35.3169)

...将发出 35.32

如果你不想舍入数字,你可以像这样用字符串操作来截断浮点数:

def truncate_number(num, limit):
  int_part, fract_part = str(float(num)).split('.')
  return float(f'{int_part}.{fract_part[:limit]}')

In [9]: truncate_number(35.3169, 2)
Out[9]: 35.31

In [9]: truncate_number(1.1199, 2)
Out[9]: 1.11

In [11]: truncate_number(1.1199, 3)
Out[11]: 1.119

In [11]: truncate_number(-1.1199, 3)
Out[11]: -1.119

请记住,此函数不会将 1 转换为 1.000

In [13]: truncate_number(1, 3)
Out[13]: 1.0