使用 ToString 将数字转换为字符串时,如何停止 Mathematica 舍入数字的最后一位?

How to stop Mathematica rounding the last digit of a number when converting it to string using ToString?

在 Mathematica 8 中,有效数字不超过 16 位的数字可以正确转换,例如

ToString[
NumberForm[0.000001234567891234567, Infinity , 
ExponentFunction -> (Null &)]
]

给出“0.000001234567891234567”。

不过,超过 16 位有效数字的数字会四舍五入,例如

ToString[
 NumberForm[0.0000012345678912345678, Infinity , 
  ExponentFunction -> (Null &)]
 ]

给出“0.000001234567891234568”。我怎样才能避免这种行为?

您应该使用 NumberMarks:

明确指定数字的精度
ToString[NumberForm[0.0000012345678912345678`17, Infinity, ExponentFunction -> (Null &)]]
"0.0000012345678912345678"

问题的原因是您的号码被解释为 MachinePrecision 号码。如果你简单地在这个数字的末尾加一个零,问题就会消失,因为这样的(新!)数字被解释为任意精度数字:

0.00000123456789123456780 // InputForm
1.2345678912345678`17.091514977603566*^-6
0.00000123456789123456780 // MachineNumberQ
False

当您的号码被解释为 MachinePrecision 号码时:

0.0000012345678912345678 // InputForm
1.2345678912345679*^-6
0.0000012345678912345678 // MachineNumberQ
True