使用 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
在 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