是否有一些直接的方法可以确保在转换为字符串时,近似数字(即带头部的数字Real
)不会有尾随“。”?如果他们只在实际显示小数部分的情况下只有小数点,我会喜欢它。
我发现的解决方案并不可靠,并且依赖于以一种尴尬的方式使用Precision
and Accuracy
,NumberForm
或者RealDigits
以一种更尴尬的方式使用。
提前致谢。
是否有一些直接的方法可以确保在转换为字符串时,近似数字(即带头部的数字Real
)不会有尾随“。”?如果他们只在实际显示小数部分的情况下只有小数点,我会喜欢它。
我发现的解决方案并不可靠,并且依赖于以一种尴尬的方式使用Precision
and Accuracy
,NumberForm
或者RealDigits
以一种更尴尬的方式使用。
提前致谢。
我过去在用数字显示数字时使用过这个:
Integerise[x_] := If[Round[x] == x, ToString[Round@x] <> ".0", ToString@x]
<> ".0"
如果您不希望以零小数显示整数,只需删除即可。
更新:正如评论中的 dreeves 所提到的,ToString
仍会截断整数的 0.0001 左右范围内的数字并显示点。
删除尾随点的更好方法是使用Inputform
ToString 的格式:
NormalNumber[x_] := ToString[x, InputForm]
通过测试:
NormalNumber /@ {5, 5.5, 123.001, 123.0001}
这可以合并到Integerise
上面来解决所提到的问题。
我推荐这个:
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@"\\.$"->""]
我可能只是对字符串进行后处理。检查最后一个字符是否为“。”更快(也更容易)而不是进行冗余算术并考虑所有精度设置。
编辑:也许你知道这一点,但你可以做这样的事情:
userToString[expr_, form___] := ToString[expr,form];
userToString[expr_Real, form___] := removeTrailingDot[ToString[expr,form]];
函数NumberForm
, ScientificForm
, EngineeringForm
, 等...提供了NumberFormat
格式化和排列数字尾数、基数和指数的选项。和
numberTrim[expr_] := NumberForm[expr,
NumberFormat -> (Row[{StringTrim[#1, "."],
If[#3 == "", "", "\[ThinSpace]\[Times]\[ThinSpace]" <> #2^#3]}] &)];
复制了默认的 Mathematica 输出,但删除了尾随点。