49 lines
1.9 KiB
Text
49 lines
1.9 KiB
Text
F commatize(s, period = 3, sep = ‘,’)
|
||
V m = re:‘(\.[0-9]+|[1-9]([0-9]+)?(\.[0-9]+)?)’.search(s)
|
||
I !m
|
||
R s
|
||
|
||
V match = m.group()
|
||
V splits = match.split(‘.’)
|
||
|
||
V ip = splits[0]
|
||
I ip.len > period
|
||
V inserted = 0
|
||
L(i) ((ip.len - 1) % period + 1 .< ip.len).step(period)
|
||
ip = ip[0 .< i + inserted]‘’sep‘’ip[i + inserted ..]
|
||
inserted += sep.len
|
||
|
||
I splits.len > 1
|
||
V dp = splits[1]
|
||
I dp.len > period
|
||
L(i) ((dp.len - 1) I/ period * period .< period - 1).step(-period)
|
||
dp = dp[0 .< i]‘’sep‘’dp[i..]
|
||
ip ‘’= ‘.’dp
|
||
|
||
R s[0 .< m.start()]‘’ip‘’s[m.end()..]
|
||
|
||
V tests = [‘123456789.123456789’,
|
||
‘.123456789’,
|
||
‘57256.1D-4’,
|
||
‘pi=3.14159265358979323846264338327950288419716939937510582097494459231’,
|
||
‘The author has two Z$100000000000000 Zimbabwe notes (100 trillion).’,
|
||
‘-in Aus$+1411.8millions’,
|
||
‘===US$0017440 millions=== (in 2000 dollars)’,
|
||
‘123.e8000 is pretty big.’,
|
||
‘The land area of the earth is 57268900(29% of the surface) square miles.’,
|
||
‘Ain't no numbers in this here words, nohow, no way, Jose.’,
|
||
‘James was never known as 0000000007’,
|
||
‘Arthur Eddington wrote: I believe there are ’""
|
||
‘15747724136275002577605653961181555468044717914527116709366231425076185631031296’""
|
||
‘ protons in the universe.’,
|
||
‘ $-140000±100 millions.’,
|
||
‘6/9/1946 was a good year for some.’]
|
||
|
||
print(commatize(tests[0], period' 2, sep' ‘*’))
|
||
print(commatize(tests[1], period' 3, sep' ‘-’))
|
||
print(commatize(tests[2], period' 4, sep' ‘__’))
|
||
print(commatize(tests[3], period' 5, sep' ‘ ’))
|
||
print(commatize(tests[4], sep' ‘.’))
|
||
|
||
L(test) tests[5..]
|
||
print(commatize(test))
|