2016-12-22 43 views
0

我用round()将浮点数限制为n小数点,但是我所拥有的数据有很多值可以减少。限制浮点数以减小数据大小

例如:

0.0 to 0 
-0.0 to 0 
0.12 to .12 
-0.12 to -.12 
1.0 to 1 

如何可以使用Python做些什么呢?

+0

什么数据大小? – TigerhawkT3

+0

浮点数的大小不取决于小数位数。 – DyZ

+0

将数据打印并保存到文件中。 – Denis

回答

2
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

+0

为什么在第一行输出中有空格? – DyZ

+0

@ TigerhawkT3 downvoting的任何原因或其仍然是复仇模式 – vks

+0

我没有downvote它,但我想我知道为什么它downvoted。 OP询问如何减小圆形浮点数的大小_。你的解决方案使用一个_character string_,它恰好具有浮点数字的_several_字符表示形式。你解决了一个不同的问题,你的许多RE的复杂性是由于解析字符串造成的。 – DyZ

1

所以,你想缩小你的数字在人物级别。使用正则表达式:

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 
-1
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'对于'0'和'1'之间的浮点数,这不是不够吗? – TigerhawkT3

+0

'-0'看起来有点邪恶。 – DyZ

+0

值得去除那个领先的0吗?最好使用定义的格式工具,而不是通过模糊正则表达式来传递值来保存一两个字符。 – hpaulj