number format with fixed total digit

How to get an output of number form of a given TOTAL digit?

For example, a total digit of 3, then one get

• 1.00 for 1.

• 10.0 for 10.

• 100. for 100.

and so on.

I try NumberForm[1., 3] but only get 1.. Of course I can use NumberForm[1., {1, 2}] to get 1.00 but then for 10. I need to use NumberForm[10.,{2, 1}] and for 100 I need to use NumberForm[100., {3, 0}], which is not automatic and depends on the certain number i input. So is there any way to get an output of number format with a fixed TOTAL digits that does not depends on the specific input?

• How many total digits do you need ? Aug 23 '18 at 10:49
• 4 digits is enough for my current use. :) Aug 23 '18 at 10:52

You can also use SetPrecision in between.

f[z_] := NumberForm[SetPrecision[z, 4], 4];
f /@ {1/10, 1, 10, 100}

{0.1000, 1.000, 10.00, 100.0}

It is one of the great miracles why this does not work for machine precision numbers.

• SetPrecision is exactly what i want. Thanks. :) Aug 23 '18 at 12:35
• You're welcome. Be careful as SetPrecision returns the input rounded, hence a different number. That does not matter if you use that only for displaying purposes. Use the result of SetPrecision in further computation if you really know what you are doing. Aug 23 '18 at 12:39

How about this ? I think this is what you want. Feel free to let me know if otherwise:

fixform[n_, dig_] := Module[{},
NumberForm[
n, {Length[IntegerDigits[Rationalize[n]]],
dig - Length[IntegerDigits[Rationalize[n]]]}]
]

n is the number and dig is the Total number of digits you want.

For example:

fixform[10., 4]

(* 10.00 *)

fixform[100., 4]

(* 100.0 *)

fixform[1., 4]

(* 1.000 *)