@@ -15,29 +15,25 @@ module Data.Formatter.Number
15
15
16
16
import Prelude
17
17
18
- import Data.Array as Arr
19
18
import Data.Array (many , some )
20
- import Data.Maybe (Maybe (..), fromMaybe , isJust )
21
- import Data.Traversable (for )
19
+ import Data.Array as Arr
22
20
import Data.Either (Either , either )
21
+ import Data.Formatter.Internal (foldDigits , repeat )
22
+ import Data.Formatter.Parser.Number (parseDigit )
23
+ import Data.Formatter.Parser.Utils (runP )
24
+ import Data.Generic.Rep (class Generic )
25
+ import Data.Generic.Rep.Show (genericShow )
23
26
import Data.Int as Int
27
+ import Data.Maybe (Maybe (..), fromMaybe , isJust )
28
+ import Data.Newtype (class Newtype )
24
29
import Data.String as Str
25
30
import Data.String.CodeUnits as CU
26
-
27
- import Data.Formatter.Parser.Utils (runP )
28
- import Data.Formatter.Internal (foldDigits , repeat )
29
- import Data.Formatter.Parser.Number (parseDigit )
30
-
31
+ import Data.Traversable (for )
31
32
import Math as Math
32
-
33
33
import Text.Parsing.Parser as P
34
34
import Text.Parsing.Parser.Combinators as PC
35
35
import Text.Parsing.Parser.String as PS
36
36
37
- import Data.Newtype (class Newtype )
38
- import Data.Generic.Rep (class Generic )
39
- import Data.Generic.Rep.Show (genericShow )
40
-
41
37
42
38
newtype Formatter = Formatter
43
39
{ comma ∷ Boolean
@@ -91,9 +87,10 @@ format ∷ Formatter → Number → String
91
87
format (Formatter f) num =
92
88
let
93
89
absed = Math .abs num
94
- tens = if absed > 0.0
95
- then max (Int .floor $ Math .log absed / Math .ln10) 0
96
- else 0
90
+ tens =
91
+ if absed > 0.0
92
+ then max (Int .floor $ Math .log absed / Math .ln10) 0
93
+ else 0
97
94
in if f.abbreviations
98
95
then
99
96
let
@@ -114,22 +111,17 @@ format (Formatter f) num =
114
111
else
115
112
let
116
113
zeros = f.before - tens - one
117
- integer = Int .floor num
118
- leftover = num - Int .toNumber integer
119
- tehths = -1 * (Int .floor $ Math .log absed / Math .ln10)
120
- rounded =
121
- let
122
- multiplier = Math .pow 10.0 $ Int .toNumber f.after
123
- in Int .round $ leftover * multiplier
114
+ integer = Int .floor absed
115
+ leftover = absed - Int .toNumber integer
116
+ rounded = Int .round $ leftover * (Math .pow 10.0 (Int .toNumber f.after))
124
117
roundedWithZeros =
125
118
let roundedString = show rounded
126
119
roundedLength = Str .length roundedString
127
120
zeros' = repeat " 0" (f.after - roundedLength)
128
121
in zeros' <> roundedString
129
122
shownNumber =
130
123
if f.comma
131
- then
132
- addCommas [] zero $ Arr .reverse $ CU .toCharArray (repeat " 0" zeros <> show integer)
124
+ then addCommas [] zero (Arr .reverse (CU .toCharArray (repeat " 0" zeros <> show integer)))
133
125
else repeat " 0" zeros <> show integer
134
126
135
127
addCommas ∷ Array Char → Int → Array Char → String
@@ -140,7 +132,7 @@ format (Formatter f) num =
140
132
_ →
141
133
addCommas (Arr .cons ' ,' acc) zero input
142
134
in
143
- (if num > zero && f.sign then " +" else " " )
135
+ (if num < zero then " - " else if num > zero && f.sign then " +" else " " )
144
136
<> shownNumber
145
137
<> (if f.after < 1
146
138
then " "
0 commit comments