抑制尾随“。”数学输出来自Mathematica

时间:2009-10-09 20:50:16

标签: wolfram-mathematica

是否有一些直接的方法可以确保在转换为字符串时,近似数字(即带Real头的数字)不会有尾随“。”?如果他们在实际显示小数部分的情况下只有小数点,我想要它。

我发现的解决方案并不健全,并且依赖于PrecisionAccuracy一起使用NumberForm尴尬,或者更多地使用RealDigits尴尬的方式。

提前致谢。

4 个答案:

答案 0 :(得分:5)

过去我在数字中显示数字时使用了这个:

Integerise[x_] := If[Round[x] == x, ToString[Round@x] <> ".0", ToString@x]

如果您不希望整数显示为零小数,请删除<> ".0"

更新:正如评论中的dreeves所提到的那样,ToString仍将截断一个整数的0.0001左右的数字并显示该点。

删除尾随点的更好方法是使用ToString的Inputform格式:

NormalNumber[x_] := ToString[x, InputForm]

进行测试:

NormalNumber /@ {5, 5.5, 123.001, 123.0001}

这可以合并到Integerise上面以解决上述问题。

答案 1 :(得分:3)

我推荐这个:

shownum[x_] := StringReplace[ToString@NumberForm[x, ExponentFunction->(Null&)], 
                             RegularExpression["\\.$"]->""]

它只是进行正则表达式搜索并替换尾随的“。”。如果你想要“123”。要显示为“123.0”而不是“123”,则只需用“.0”替换最后一个空字符串。

更新:我的原始版本显示错误的数字默认情况下Mathematica以科学计数法显示。 我用NumberForm解决了这个问题。

这是我在现实生活中实际使用的版本。它允许可选的舍入:

(* Show Number. Convert to string w/ no trailing dot. Round to the nearest r. *)
Unprotect[Round];   Round[x_,0] := x;   Protect[Round];
re = RegularExpression;
shn[x_, r_:0] := StringReplace[
  ToString@NumberForm[Round[N@x,r], ExponentFunction->(Null&)], re@"\\.$"->""]

答案 2 :(得分:1)

我可能只是对字符串进行后期处理。只检查最后一个字符是否“更快”(并且更容易)。而不是做冗余算术并考虑所有的精度设置。

编辑:也许你知道这一点,但你可以这样做:

userToString[expr_, form___] := ToString[expr,form];

userToString[expr_Real, form___] := removeTrailingDot[ToString[expr,form]];

答案 3 :(得分:1)

函数NumberFormScientificFormEngineeringForm等...提供选项NumberFormat来格式化和排列数字的尾数,基数和指数。与

numberTrim[expr_] := NumberForm[expr,
   NumberFormat -> (Row[{StringTrim[#1, "."], 
        If[#3 == "", "", "\[ThinSpace]\[Times]\[ThinSpace]" <> #2^#3]}] &)];

重现默认的Mathematica输出,但删除了尾随点。

相关问题