purescript-contrib/purescript-formatters

unformatNumber seems to be broken

Opened this issue · 3 comments

> import Data.Formatter.Number (unformatNumber)
> unformatNumber ("00.00") "5.0"
(Left "Error: too few digits before dot")

> unformatNumber ("00.00") "50.0"
(Left "Error: too few digits after dot")

> unformatNumber ("00.00") "50.00"
(Right 50.0)

> unformatNumber ("00.00") "50.0234252"
(Right 2392.52)

> unformatNumber ("0.00") "50.0234252"
(Right 2392.52)

> unformatNumber ("0.0") "50.0234252"
(Right 23475.2)

I'm not sure if the first two are expected or not, but the last two seem clearly wrong.

> unformatNumber "0.0" "1507142848002.0"
(Right -390672894.0)

from #38 by @Houndolon

I think issue is that we should check for equality here
https://github.com/slamdata/purescript-formatters/blob/master/src/Data/Formatter/Number.purs#L184-L193

  before ←
    if Arr.length beforeDigits == f.before
    then P.fail $ "Error: need to have" <> show f.after <> " digits before dot"
    else pure $ Int.toNumber $ foldDigits beforeDigits

  afterDigits ← some parseDigit
  after ←
    if Arr.length afterDigits == f.after
    then P.fail $ "Error: need to have" <> show f.after <> " digits after dot"
    else pure $ Int.toNumber $ foldDigits afterDigits

@cryogenian is this what you have suggested before as solution?