MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Rounding to a certain number of decimal places

  • To: mathgroup at smc.vnet.net
  • Subject: [mg119285] Re: Rounding to a certain number of decimal places
  • From: Daniel Lichtblau <danl at wolfram.com>
  • Date: Sat, 28 May 2011 07:21:38 -0400 (EDT)

On 05/27/2011 05:14 AM, Andrew DeYoung wrote:
> Hi,
>
> I would like to be able to round a number to a certain, specified
> number of decimal places (not number of digits), including zeros.
> Suppose that some function f does this, and takes two arguments, the
> number to be rounded and the number of decimal places to which to
> round:  f[number, numPlaces].  Then, for example, I would like the
> following results, if possible:
>
> f[0.8168, 3] = 0.817
> f[1.8168, 3] = 1.817
> f[10.8168, 3] = 10.817
> f[100.8168, 3] = 100.817
> f[0.99, 3] = 0.990
> f[0.9, 3] = 0.900
> f[0.00572, 3] = 0.006
>
> Is there a function f (either built-in or a custom function) that can
> do this?  Mathmatica's built-in function NumberForm does not quite do
> this because the user specifies the number of digits, not the number
> of decimal places.  Also, NumberForm does not count zeros after the
> decimal point as digits, nor does it add extra zeros as needed if they
> are redundant.
>
> Am I getting into deep water here, or is there something
> straightforward that can do what I would like?
>
> I am running Mathmatica 7.  Also, I do not need to be able to do
> further computations on the output; I will be converting the output to
> a string, anyway.
>
> Thank you very much for your time.
>
> Andrew DeYoung
> Carnegie Mellon University

To obtain numbers of the desired form, either of f or f2 will suffice. 
The key issue is to force the Accuracy (in Mathematica's usage) to be 
the desired number of digits. Some experimenting showed me I needed to 
add a hair beyond the integer specification in order to have them come 
out right.

f[n_, d_Integer] := N[Rationalize[n, 0], {Infinity, d + 10^(-2)}]

f2[n_, d_Integer] := SetAccuracy[n, d + 10^(-2)]

If all that is of interest is the formatting, can use NumberForm as below.

f3[n_, d_Integer] := NumberForm[n, {Infinity, d}]

Daniel Lichtblau
Wolfram Research


  • Prev by Date: Re: Rounding to a certain number of decimal places
  • Next by Date: a problem with NIntegrate
  • Previous by thread: Re: Rounding to a certain number of decimal places
  • Next by thread: Re: Rounding to a certain number of decimal places