Suffixation of decimal numbers: Difference between revisions

Added 11l
(Added 11l)
Line 118:
{{Template:Strings}}
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<lang 11l>F suffize(numstr, digits = -1, base = 10)
V suffixes = [‘’, ‘K’, ‘M’, ‘G’, ‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’, ‘X’, ‘W’, ‘V’, ‘U’, ‘googol’]
 
V exponent_distance = I base == 2 {10} E 3
V num_sign = I numstr[0] C ‘+-’ {numstr[0]} E ‘’
 
V num = abs(Float(numstr.replace(‘,’, ‘’)))
 
Int suffix_index
I base == 10 & num >= 1e100
suffix_index = 13
num /= 1e100
E I num > 1
V magnitude = floor(log(num, base))
suffix_index = min(Int(floor(magnitude / exponent_distance)), 12)
num /= Float(base) ^ (exponent_distance * suffix_index)
E
suffix_index = 0
 
String num_str
I digits != -1
num_str = format_float(num, digits)
E
num_str = format_float(num, 3).rtrim(‘0’).rtrim(‘.’)
 
R num_sign‘’num_str‘’suffixes[suffix_index]‘’(I base == 2 {‘i’} E ‘’)
 
F p(num, digits = -1, base = 10)
print(num, end' ‘ ’)
I digits != -1
print(digits, end' ‘ ’)
I base != 10
print(‘base = ’base, end' ‘ ’)
print(‘: ’suffize(num, digits, base))
 
p(‘87,654,321’)
p(‘-998,877,665,544,332,211,000’, 3)
p(‘+112,233’, 0)
p(‘16,777,216’, 1)
p(‘456,789,100,000,000’, 2)
p(‘456,789,100,000,000’, 5, 2)
p(‘456,789,100,000.000e+00’, 0, 10)
p(‘+16777216’, -1, 2)
p(‘1.2e101’)</lang>
 
{{out}}
<pre>
87,654,321 : 87.654M
-998,877,665,544,332,211,000 3 : -998.878E
+112,233 0 : +112K
16,777,216 1 : 16.8M
456,789,100,000,000 2 : 456.79T
456,789,100,000,000 5 base = 2 : 415.44727Ti
456,789,100,000.000e+00 0 : 457G
+16777216 base = 2 : +16Mi
1.2e101 : 12googol
</pre>
 
=={{header|Go}}==
1,481

edits