7

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

我发现的解决方案并不可靠,并且依赖于以一种尴尬的方式使用Precisionand AccuracyNumberForm或者RealDigits以一种更尴尬的方式使用。

提前致谢。

4

4 回答 4

5

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

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

<> ".0"如果您不希望以零小数显示整数,只需删除即可。

更新:正如评论中的 dreeves 所提到的,ToString仍会截断整数的 0.0001 左右范围内的数字并显示点。

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

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

通过测试:

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

这可以合并到Integerise上面来解决所提到的问题。

于 2009-10-10T06:50:51.560 回答
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@"\\.$"->""]
于 2009-10-14T21:56:18.493 回答
1

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

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

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

userToString[expr_Real, form___] := removeTrailingDot[ToString[expr,form]];
于 2009-10-09T20:51:34.893 回答
1

函数NumberForm, ScientificForm, EngineeringForm, 等...提供了NumberFormat格式化和排列数字尾数、基数和指数的选项。和

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

复制了默认的 Mathematica 输出,但删除了尾随点。

于 2016-03-13T22:11:19.330 回答