Every rational number can be represented as either a terminating or repeating decimal.
1/2 = 0.5
, 1/4 = 0.25
and 1/5 = 0.2
are examples of terminating decimals.
And, 1/3 = 0.(3)
, 2/3 = 0.(6)
, 5/6 = 0.8(3)
and 3/7 = 0.(428571)
are examples of repeating decimals.
Write a function, toDecimalString : Rational -> String
, that outputs the decimal representation of a given rational number.
Your function MUST pass the following tests:
toDecimalStringSuite : Test
toDecimalStringSuite =
describe "toDecimalString" <|
[ terminatingDecimalSuite
, repeatingDecimalSuite
]
terminatingDecimalSuite : Test
terminatingDecimalSuite =
describe "terminating decimals" <|
[ test "1/2" <|
\_ ->
Rational.new 1 2
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.5")
, test "5/2" <|
\_ ->
Rational.new 5 2
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "2.5")
, test "1/4" <|
\_ ->
Rational.new 1 4
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.25")
, test "1/5" <|
\_ ->
Rational.new 1 5
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.2")
, test "1/8" <|
\_ ->
Rational.new 1 8
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.125")
]
repeatingDecimalSuite : Test
repeatingDecimalSuite =
describe "repeating decimals" <|
[ test "1/3" <|
\_ ->
Rational.new 1 3
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(3)")
, test "2/3" <|
\_ ->
Rational.new 2 3
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(6)")
, test "1/6" <|
\_ ->
Rational.new 1 6
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.1(6)")
, test "5/6" <|
\_ ->
Rational.new 5 6
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.8(3)")
, test "1/7" <|
\_ ->
Rational.new 1 7
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(142857)")
, test "2/7" <|
\_ ->
Rational.new 2 7
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(285714)")
, test "3/7" <|
\_ ->
Rational.new 3 7
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(428571)")
, test "1/9" <|
\_ ->
Rational.new 1 9
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(1)")
, test "2/9" <|
\_ ->
Rational.new 2 9
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(2)")
, test "8/9" <|
\_ ->
Rational.new 8 9
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(8)")
, test "7/12" <|
\_ ->
Rational.new 7 12
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.58(3)")
, test "1/23" <|
\_ ->
Rational.new 1 23
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(0434782608695652173913)")
, test "1/97" <|
\_ ->
Rational.new 1 97
|> Maybe.map Rational.toDecimalString
|> Expect.equal (Just "0.(010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567)")
]
Top comments (0)