# SetAccuracy behavior

I'm puzzled by the output I get from SetAccuracy. According to the documentation, when SetAccuracy is used to increase the accuracy of a number, the number is padded with zeros. But, let's take a look at a couple of examples:

SetAccuracy[1.2, 5]
(* 1.2000 *)
SetAccuracy[1., 5]
(* 1.0000 *)
SetAccuracy[0.2, 5]
(* 0.2000 *)


These examples seem to work properly, so why does it behave differently in this case?

SetAccuracy[0., 5]
(* 0.*10^-5 *)


What should I do to get a zero with four trailing zeros?

Update I'm asking this question, because I need to export data to a txt file and I would like to avoid having 0.*10^-5 sort of numbers.

• SetAccuracy is not a formatting tool, but intended to set accuracy of numeric value(s). How about something like PaddedForm[0., {4, 4}]? Oct 29 '12 at 11:50
• @kirma It might work, but it creates other problems if I try to export the data.
– VLC
Oct 29 '12 at 12:05
• What other problems?
– Rojo
Oct 29 '12 at 12:19
• NumberForm[0., {1, 4}] will print 0.0000 Oct 29 '12 at 13:03
• @image_doctor Maybe this workaround solves the problem:StandardForm@ NumberForm[1200345., {10, 4}, ExponentFunction -> (Null &)]. I'll check it now extensively.
– VLC
Oct 29 '12 at 14:02

The comments by image_doctor led me to the answer I was looking for:

StandardForm@NumberForm[1.2, {20, 4}, ExponentFunction -> (Null &)]
(* 1.2000 *)
StandardForm@NumberForm[1., {20, 4}, ExponentFunction -> (Null &)]
(* 1.0000 *)
StandardForm@NumberForm[0.2, {20, 4}, ExponentFunction -> (Null &)]
(* 0.2000 *)
StandardForm@NumberForm[0., {20, 4}, ExponentFunction -> (Null &)]
(* 0.0000 *)


The data are then consistent and can be easily exported.

• You would think this workaround could be invoked via an Export option. Dec 9 '15 at 15:21

Might want to have a look at the InputForm of these.

SetAccuracy[0., 5] // InputForm

(*Out//InputForm = 05.*)

SetAccuracy[1.2, 5] // InputForm

(*Out//InputForm=1.199999999999999955591079014993738383055.079181246047625*)


I doubt either gives the behavior you are after. As was suggested in a comment, maybe NumberForm or PaddedForm will meet your needs.

An example that allows you to accomplish your goal of exporting to a file without needing SetAccuracy is as follows:

Export["test.txt", ToString@NumberForm[#, {5, 4}] & /@ {RandomReal[], 0.0}]]
FilePrint["test.txt"]

Out= "test.txt"

0.6538
0.0000
`