Formatted numeric output: Difference between revisions

Content added Content deleted
(Add min)
Line 1,224: Line 1,224:
=={{header|Lambdatalk}}==
=={{header|Lambdatalk}}==
<lang scheme>
<lang scheme>
{def padd
{def fmt
{lambda {:z :x}
{def padd {lambda {:n :x} {if {< :n 1} then else :x{padd {- :n 1} :x}}}}
{def trunc {lambda {:n} {if {> :n 0} then {floor :n} else {ceil :n}}}}
{if {= :z 0}
{lambda {:a :b :n}
then else :x{padd {- :z 1} :x}}}}
{let { {:a :a} {:b :b} {:n {abs :n}} {:sign {if {>= :n 0} then + else -}}
-> padd
{:trunc {trunc :n}}
{:dec {abs {trunc {* 1.0e:b {- :n {trunc :n}}}}}}
} {br}{padd {- :a {W.length {trunc :n}}} >}
{if {W.equal? :sign -}
then else :sign}:trunc.:dec{padd {- :b {W.length :dec}} 0} }}}
-> fmt


{def format
{def numbers
7.125
{lambda {:f :x :n}
10.7
{let { {:f :f} {:x :x} {:n {padd :f :x}:n} }
0.980
{br}{W.slice {- {W.length :n} :f} {- {W.length :n} 0} :n}}}}
-1000
-> format
559.8

-69.99
{def numbers 0.000123456789
0.123456789
4970.430}
1.23456789
123.456789
123456789}
-> numbers
-> numbers


{S.map {format 15 _} {numbers}}
{S.map {fmt 10 3} {numbers}}
->
->
>>>>>>>>> +7.125
_0.000123456789
>>>>>>>> +10.699
____0.123456789
>>>>>>>>> +0.980
_____1.23456789
>>>>>> -1000.000
_____123.456789
>>>>>>> +559.799
______123456789
>>>>>>>> -69.989
>>>>>> +4970.430
</lang>
</lang>