在Python中截断十进制值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中截断十进制值相关的知识,希望对你有一定的参考价值。

我试图在Python中截断一个十进制值。我不想舍入它,而只是显示小数值达到指定的精度。我尝试了以下方法:

d = 0.989434
'{:.{prec}f}'.format(d, prec=2)

这使其达到0.99。但我实际上希望输出为0.98。显然,round()不是一种选择。有没有办法做到这一点?或者我应该回到代码并将所有内容更改为decimal

谢谢。

答案

我不知道你的所有要求,但这将是相当强大的。

>> before_dec, after_dec = str(d).split('.')
>> float('.'.join((before_dec, after_dec[0:2])))
0.98

2018-01-03 edit

这个答案不健全或数学上不正确。请参阅Nilani Algiriyage's answer below以了解使用Decimal.quantize方法执行此操作的正确方法。

另一答案

在这种情况下,下面的代码将打印0.98,但是你必须要小心你的d值不会大于或等于10,因为它只会打印,例如10.1而不是10.12。

d = 0.989434
print '{:.{prec}s}'.format(str(d), prec=4)
另一答案

还有数学:

d = 0.989434
x = int(d * 100.0) / 100.0
print "{0:0.2f}".format(x)
另一答案

在这个链接here我发布了以下解决方案:

def truncate_number(f_number, n_decimals):
      strFormNum = "{0:." + str(n_decimals+5) + "f}"
      trunc_num = float(strFormNum.format(f_number)[:-5])
      return(trunc_num)

# Testing the 'trunc_num()' function
test_num = 1150/252
[(idx, truncate_number(test_num, idx)) for idx in range(0, 20)]

至少它不需要加载任何模块也不需要新的计算。到目前为止,它解决了公共债券价格计算中截断要求的问题。

另一答案

您可以使用以下代码

import decimal
d = 0.989434

print decimal.Decimal(d).quantize(decimal.Decimal('.01'), rounding=decimal.ROUND_DOWN)
另一答案
d = 0.989434
print floor(d * 100) / 100

Math.floor(x)将x的底限作为float返回,最大整数值小于或等于x。

移动小数点'。'左侧的2位小数,地板,然后移回'。'右边的数字。

100可以修改

n = 2
m = pow (10, n)
d = 0.989434
print floor(d * m) / m

n是你想要的精度。

编辑:如果d为负数,则必须使用ceil方法

if d < 0:
    print ceil(d * m) / m
else:
    print floor(d * m) / m
另一答案

将其格式化为更长的时间,然后切断额外的数字:

def truncate(f, digits):
    return ("{:.30f}".format(f))[:-30+digits]
另一答案

这是我相信的最佳方式。

  1. 将有效数字向左移动
  2. 截断小数部分
  3. 将移动的位数向左移动到右侧 d = 0.989434 print "{0:0.2f}".format(int(d * 100)/100.0) 产量 0.98
另一答案
import math

d = 0.989434
prec = 2
output = math.floor(d * (10 ** prec)) / (10 ** prec)

如果你仍然想要一个十进制变量而不是字符串

另一答案

与其他一些答案相似,但没有任何进口

def truncate(x, d):
    return int(x*(10.0**d))/(10.0**d)

>>>truncate(0.987654, 2)
0.98
另一答案

str

d = str(0.989434)
print float(d[:d.find('.')+3])
另一答案

如果您只需要显示,可以将其转换为字符串并对其进行切片:

d = 0.989434
print str(d)[0:4] #or print(str(d)[0:4])

以上是关于在Python中截断十进制值的主要内容,如果未能解决你的问题,请参考以下文章

BYTE数据怎么转化成二进制字符串

Flex - 截断显示为字符串的十进制值

访问链接表从 SQL 服务器截断我的十进制值

如何使用 EntityFramework 4.1 CodeFirst 防止十进制值在保存时被截断为 2 位? [复制]

不使用 SetRoundingMode() 截断浮点值

go语言怎么将二进制转为字符串