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