2016-12-22 46 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