Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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.

share|improve this question
2  
SetAccuracy is not a formatting tool, but intended to set accuracy of numeric value(s). How about something like PaddedForm[0., {4, 4}]? –  kirma 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
2  
NumberForm[0., {1, 4}] will print 0.0000 –  image_doctor Oct 29 '12 at 13:03
1  
@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
show 4 more comments

3 Answers

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

SetAccuracy[0., 5] // InputForm

(*Out[38]//InputForm = 0``5.*)

SetAccuracy[1.2, 5] // InputForm

(*Out[39]//InputForm=1.19999999999999995559107901499373838305`5.079181246047625*)

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

share|improve this answer
add comment
up vote 2 down vote accepted

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.

share|improve this answer
add comment

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[40]= "test.txt"

0.6538
0.0000
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.