我知道如何控制小数点数,但是如何特别控制零点的数量?使用特定数量的零点打印浮点数
例如:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
我知道如何控制小数点数,但是如何特别控制零点的数量?使用特定数量的零点打印浮点数
例如:
104.06250000 -> 104.0625
119.00000 -> 119.0
72.000000 -> 72.0
我不认为这是一个预定义的格式 - python中的格式是从C继承而来的,我很确定你没有在C中拥有所需的格式。现在,在python 3中,你有格式特殊功能,您可以在其中进行自己的格式化。在python去掉最后的零很简单:只要用剥离法:
a = 1.23040000
print str(a).rstrip('0')
如果你想在小数点后保留一个0,这不是很困难的要么。
的'%2.2f'
运营商只会做相同数量的小数,无论数量多少显著的数字了。你将不得不在数字中识别这一点,并手动修改格式。您可能可以通过打印到具有大量小数位的字符串并将所有尾随零去掉来实现快捷方式。
平凡函数来做到这一点可能看起来像下面的示例中:
import re
foo_string = '%.10f' % (1.33333)
bar_string = '%.10f' % (1)
print 'Raw Output'
print foo_string
print bar_string
print 'Strip trailing zeros'
print re.split ('0+$', foo_string)[0]
print re.split ('0+$', bar_string)[0]
print 'Intelligently strip trailing zeros'
def intel_format (nn):
formatted = '%.10f' % (nn)
stripped = re.split('0+$', formatted)
if stripped[0][-1] == '.':
return stripped[0] + '0'
else:
return stripped[0]
print intel_format (1.3333)
print intel_format (1.0)
运行时,你会得到这样的输出:
Raw Output
1.3333300000
1.0000000000
Strip trailing zeros
1.33333
1.
Intelligently strip trailing zeros
1.3333
1.0
谢谢!我也想出了测试,如果float_variable%1 == 0,这样做。 – zequzd 2009-06-11 14:19:31
如何使用十进制模块?
“十进制模块具有显著场所的概念,从而使1.30 + 1.20 2.50尾随零保持指示意义。这是货币应用的习惯表现为乘法中,“教科书”的方法使用了所有附图中的被乘数例如,1.3 * 1.2 1.56给出而1.30 * 1.20 1.5600给出“
normalize()该函数删除尾随零:。
>>> from decimal import *
>>> d1 = Decimal("1.30")
>>> d2 = Decimal("1.20")
>>> d3
Decimal("1.5600")
>>> d3.normalize()
Decimal("1.56")
是的,这也可能。然而,我必须编写的程序本质上是科学的,或者与意义无关,这只是一个微不足道的练习,但现在它起作用了。谢谢! – zequzd 2009-06-11 14:21:05
def float_remove_zeros(input_val):
"""
Remove the last zeros after the decimal point:
* 34.020 -> 34.02
* 34.000 -> 34
* 0 -> 0
* 0.0 -> 0
"""
stripped = input_val
if input_val != 0:
stripped = str(input_val).rstrip('0').rstrip('.')
else:
stripped = 0
return stripped
我认为最简单的方法是“圆”功能。在你的情况下:
>>> round(104.06250000,4)
104.0625
如果你使用Python 2.6或更高版本,你可以使用字符串方法格式。
>>> print "{0}".format(1.0)
1.0
>>> print "{0}".format(1.01)
1.01
>>> print "{0}".format(float(1))
1.0
>>> print "{0}".format(1.010000)
1.01
好的,太棒了!现在我只需要分别处理1.000000 - > 1.0这种情况,任何简短的方法,即检查“。”后面是否只有零。 – zequzd 2009-06-11 14:01:51
我会直接回答:检测最后一个字符是否是一个点,如果是这种情况,则添加一个0。请记住,这在本地化下不起作用(例如用我的母语法语,我们使用','表示小数点,'。'表示千位分隔符)。 – 2009-06-11 14:11:07