是否有一些直接的方法可以确保在转换为字符串时,近似数字(即带Real
头的数字)不会有尾随“。”?如果他们在实际显示小数部分的情况下只有小数点,我想要它。
我发现的解决方案并不健全,并且依赖于Precision
和Accuracy
一起使用NumberForm
尴尬,或者更多地使用RealDigits
尴尬的方式。
提前致谢。
答案 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)
函数NumberForm
,ScientificForm
,EngineeringForm
等...提供选项NumberFormat
来格式化和排列数字的尾数,基数和指数。与
numberTrim[expr_] := NumberForm[expr,
NumberFormat -> (Row[{StringTrim[#1, "."],
If[#3 == "", "", "\[ThinSpace]\[Times]\[ThinSpace]" <> #2^#3]}] &)];
重现默认的Mathematica输出,但删除了尾随点。