Python 对浮点值保持相同的格式
我有一个python程序,它使用以下正则表达式读取浮点值Python 对浮点值保持相同的格式,python,formatting,floating-point,Python,Formatting,Floating Point,我有一个python程序,它使用以下正则表达式读取浮点值 (-?\d+\.\d+) 一旦我使用float(match.group(1))提取值,我就会得到实际的浮点数。但是,我无法区分数字是1.2345678还是1.234或1.2340000 我面临的问题是再次以完全相同的格式打印浮点值。一个简单的解决方案是在仍然是字符串时“拆分并计算”浮点值,例如在小数点处拆分,并计算整数部分长度和小数部分长度,然后创建如下格式的格式化程序: print "%"+str(total_len)+"."+st
(-?\d+\.\d+)
一旦我使用float(match.group(1))提取值,我就会得到实际的浮点数。但是,我无法区分数字是1.2345678还是1.234或1.2340000
我面临的问题是再次以完全相同的格式打印浮点值。一个简单的解决方案是在仍然是字符串时“拆分并计算”浮点值,例如在小数点处拆分,并计算整数部分长度和小数部分长度,然后创建如下格式的格式化程序:
print "%"+str(total_len)+"."+str(fractional_len)+"f" % value
但也许您知道实现相同结果的标准方法?如果您想保持固定精度,请避免使用
浮点
s,而是使用十进制
:
>>> from decimal import Decimal
>>> d = Decimal('-1.2345')
>>> str(d)
'-1.2345'
>>> float(d)
-1.2344999999999999
如果要保持固定精度,请避免使用
float
s,而是使用Decimal
:
>>> from decimal import Decimal
>>> d = Decimal('-1.2345')
>>> str(d)
'-1.2345'
>>> float(d)
-1.2344999999999999
你的方法基本上是正确的。 字符串格式有一个不太常用的
*
运算符,您可以将其用于格式大小,下面是一些代码:
import re
def parse_float(str):
re_float = re.compile(r'(-?)(\d+)\.(\d+)')
grps = re_float.search(str)
sign, decimal, fraction = grps.groups()
float_val = float('%s%s.%s' % (sign, decimal, fraction))
total_len = len(grps.group(0))
print '%*.*f' % (total_len, len(fraction), float_val)
parse_float('1.2345678')
parse_float('1.234')
parse_float('1.2340000')
它输出
1.2345678
1.234
1.2340000
你的方法基本上是正确的。 字符串格式有一个不太常用的
*
运算符,您可以将其用于格式大小,下面是一些代码:
import re
def parse_float(str):
re_float = re.compile(r'(-?)(\d+)\.(\d+)')
grps = re_float.search(str)
sign, decimal, fraction = grps.groups()
float_val = float('%s%s.%s' % (sign, decimal, fraction))
total_len = len(grps.group(0))
print '%*.*f' % (total_len, len(fraction), float_val)
parse_float('1.2345678')
parse_float('1.234')
parse_float('1.2340000')
它输出
1.2345678
1.234
1.2340000
更好的是,让它尽可能长。更好的是,让它尽可能长。