如何获取浮点变量,并控制浮点数在没有round()的情况下走多远?例如。
w = float(1.678)
我想取x并从中取出以下变量。
x = 1.67
y = 1.6
z = 1
如果我使用相应的圆形方法:
x = round(w, 2) # With round I get 1.68
y = round(y, 1) # With round I get 1.7
z = round(z, 0) # With round I get 2.0
它会绕过并改变数字到我没用的地步。我知道这是圆形的,它的工作正常。我如何在x,y,z变量中获取所需的信息,并且仍然能够以浮点格式在其他方程中使用它们?
答案 0 :(得分:16)
你可以这样做:
def truncate(f, n):
return math.floor(f * 10 ** n) / 10 ** n
测试:
>>> f=1.923328437452
>>> [truncate(f, n) for n in range(7)]
[1.0, 1.9, 1.92, 1.923, 1.9233, 1.92332, 1.923328]
答案 1 :(得分:4)
整数比浮点数/双精度型更快,而浮点型/双精度型比字符串快。在这种情况下,我尝试两种方法都花点时间:
timeit.timeit(stmt = "float(str(math.pi)[:12])", setup = "import math", number = 1000000)
〜1.1929605630000424
用于:
timeit.timeit(stmt = "math.floor(math.pi * 10 ** 10) / 10 ** 10", setup = "import math", number = 1000000)
〜0.3455968870000561
因此使用math.floor而不是字符串操作是安全的。
答案 2 :(得分:3)
一个超级简单的解决方案是使用字符串
x = float (str (w)[:-1])
y = float (str (w)[:-2])
z = float (str (w)[:-3])
任何一个浮点库解决方案都需要你躲闪一些舍入,并且使用10/10的最小值来挑选小数,与上面相比可能会有点毛茸茸。
答案 3 :(得分:0)
如果您只需要以格式控制精度
pi = 3.14159265
format(pi, '.3f') #print 3.142 # 3 precision after the decimal point
format(pi, '.1f') #print 3.1
format(pi, '.10f') #print 3.1415926500, more precision than the original
如果需要控制浮点运算的精度
import decimal
decimal.getcontext().prec=4 #4 precision in total
pi = decimal.Decimal(3.14159265)
pi**2 #print Decimal('9.870') whereas '3.142 squared' would be off
- 编辑 -
没有"舍入",从而截断数字
import decimal
from decimal import ROUND_DOWN
decimal.getcontext().prec=4
pi*1 #print Decimal('3.142')
decimal.getcontext().rounding = ROUND_DOWN
pi*1 #print Decimal('3.141')