我用round()
将浮点数限制为n
小数点,但是我所拥有的数据有很多值可以减少。限制浮点数以减小数据大小
例如:
0.0 to 0
-0.0 to 0
0.12 to .12
-0.12 to -.12
1.0 to 1
如何可以使用Python做些什么呢?
我用round()
将浮点数限制为n
小数点,但是我所拥有的数据有很多值可以减少。限制浮点数以减小数据大小
例如:
0.0 to 0
-0.0 to 0
0.12 to .12
-0.12 to -.12
1.0 to 1
如何可以使用Python做些什么呢?
x="""0.0
-0.0
0.12
-0.12
1.0
12.0
-12.00
12.001
-12.001
10.01
-10.01
00.12"""
def repl(matchobj):
return ''.join(i for i in matchobj.groups() if i)
print re.sub(r"(-?)(?:\b0+(\.\d)(\d*)(?<!-0\.0)(?<!0\.0)\b|\b([1-9]\d*)\.0+\b)|-?(0)+\.0\b", repl , x)
输出:
0 0 .12 -.12 1 12 -12 12.001 -12.001 10.01 -10.01 .12
所以,你想缩小你的数字在人物级别。使用正则表达式:
if n == 0: # Takes care of 0.0, -0.0, 0000.000, etc.
m = "0"
elif type(n) == int: # Takes care of integer numbers
m = re.sub(r'^(-)?0+', r'\1', str(n))
elif n > 0: # Takes care of fp positive numbers
m = re.sub(r'^0+|\.?0+$', '', str(n))
else: # Takes care of fp negative numbers, DIY
In [360]: alist=[0.0, -0.0, .12, -.12, 1.0]
一般漂浮在PY3风格format
格式:
In [361]: '{}, {}, {}, {}, {}'.format(*alist)
Out[361]: '0.0, -0.0, 0.12, -0.12, 1.0'
的n
(或g
)格式得到部分的方式,你想去的地方:
In [362]: '{:n}, {:n}, {:n}, {:n}, {:n}'.format(*alist)
Out[362]: '0, -0, 0.12, -0.12, 1'
,它还包括用于0.12
领先0
。
如果它仍然包括领先的'0'对于'0'和'1'之间的浮点数,这不是不够吗? – TigerhawkT3
'-0'看起来有点邪恶。 – DyZ
值得去除那个领先的0吗?最好使用定义的格式工具,而不是通过模糊正则表达式来传递值来保存一两个字符。 – hpaulj
什么数据大小? – TigerhawkT3
浮点数的大小不取决于小数位数。 – DyZ
将数据打印并保存到文件中。 – Denis