在Python中(以常规浮点数,numpy或十进制表示),是否可以在获取字符串表示形式时同时设置最小和最大小数位?
说我希望最小的小数位数为2,最大的小数位数为6。
1-> 1.00(最小到2个小数位)
1.00-> 1.00
1.001-> 1.001(保持精度)
1.000100-> 1.0001(保持精度,但下降尾随0s)
1.000124999999-> 1.00125(最多6个小数位)
我首先想到的是
('%.6f' % f).rstrip('0')
这会将最大精度设置为6,并丢弃不必要的0。但是它没有做最小的小数位。
答案 0 :(得分:0)
我找到了这个解决方案:
def set_min_max(s, min, max):
n1 = (str('%.' + str(max) + 'f') % float(s)).rstrip('0')
if len(n1.rsplit(".")[-1]) < min:
n1 = str('%.'+ str(min) + 'f') % float(s)
return n1
min = 2
max = 6
s = '1'
print (set_min_max(s, min, max))
s = '1.00'
print (set_min_max(s, min, max))
s = '1.001'
print (set_min_max(s, min, max))
s = '1.000100'
print (set_min_max(s, min, max))
s = '1.000124999999'
print (set_min_max(s, min, max))
> 1.00
> 1.00
> 1.001
> 1.0001
> 1.000125