# FormattingDecimals

## Formatting Decimals: PG Code Snippet

We show how to format decimals for display in PG problems. Note that these are insertions, not a complete PG file. This code will have to be incorporated into the problem file on which you are working.

PG problem file Explanation
```loadMacros("PGstandard.pl","MathObjects.pl");
```

Initialization: Standard.

```\$a = random(3,7,1);
# log is natural log, and ln is also natural log
\$b = sprintf("%0.3f", log(\$a)/log(10) );
```

Setup: Use perl's `sprintf( format, number );` command to format the decimal. The `"%0.3f"` portion truncates after 3 decimal places and uses zeros (not spaces) to right-justify. For answers involving money, you should set `"%0.2f"` for two decimal places and zero filling (for example, `sprintf("%0.2f",0.5);` returns `0.50`). You can do a web search for more options to perl's `sprintf`, and also for WeBWorK's `contextCurrency.pl`. If you do further calculations with `\$b`, be aware that numerical error may be an issue since you've reduced the number of decimal places.

We used the logarithm change of base formula log10(a) = log(a) / log(10) = ln(a) / ln(10) to get a logarithm base 10.

Note: If we load `MathObjects.pl`, then `log` and `ln` are both defined to be the natural logarithm (base e, not base 10). If we had loaded the older `PGauxiliaryFunctions.pl` macro instead, then `ln` would be undefined and `log` would be defined as the natural logarithm (base e, not base 10).

```BEGIN_TEXT

\( \$b = \) \{ ans_rule(20) \}

END_TEXT
```

Main Text: Display the formatted number.

```ANS( \$b->cmp() );
```