 # Converting a decimal to a fraction

Wednesday 30 January 2008 @ 2:34 pm

One of my customers asked if I could help them with a formula. The formula is found in article c2012665 in the Business Objects knowledge base and it converts a decimal number into fraction format. In other words it should convert .75 into 3/4 as a string. The formula used a clever loop but it had 3 problems:

1) If the input was an integer you would still get the fraction, but with a 0 on top.
2) If the input was between 0 and 1 (like .75) you would get the integer 0 in the output.
3) The formula was in BASIC syntax which makes it hard for many users to modify.

So I converted it to Crystal syntax and cleaned up the output. The result is below.

Note that this formula is set to round the decimal value to 4 places (see the 3rd line below). You can round it to more or less if you choose. But if you are using v8.5 you MUST round to no more then 2 decimal places or Crystal will start to error because there are limits on the number of iterations that v8.5 can do.

```NumberVar raw :={your.field}; NumberVar wholeNumber := int(raw); NumberVar decInput := round (raw - Wholenumber , 4); NumberVar numerator :=1; NumberVar denominator :=1; NumberVar decimalFraction := numerator / denominator ; Do ((If decimalFraction < decInput Then numerator := numerator + 1 Else ( denominator := denominator + 1 ; numerator := truncate(decInput * denominator))) ;decimalFraction := numerator / denominator ) While decimalFraction <> decInput;```
``` (if wholenumber > 0 then totext(wholeNumber,0,"") + " " else "") & (if numerator > 0 then totext(numerator,0 , "") & "/" & totext(denominator,0 , "") else "")``` 