【发布时间】:2011-03-06 04:15:51
【问题描述】:
出于显示目的,我使用以下函数将数字转换为字符串(不要使用科学计数法,不要使用尾随点,按指定舍入):
(* Show Number. Convert to string w/ no trailing dot. Round to the nearest r. *)
Unprotect[Round]; Round[x_,0] := x; Protect[Round];
shn[x_, r_:0] := StringReplace[
ToString@NumberForm[Round[N@x,r], ExponentFunction->(Null&)], re@"\\.$"->""]
(注意re 是RegularExpression 的别名。)
多年来,这一直很好地为我服务。 但有时我不想指定要四舍五入的位数,而是想指定一些有效数字。 例如,123.456 应显示为 123.5,但 0.00123456 应显示为 0.001235。
为了真正花哨,我可能想在小数点前后指定有效数字。 例如,我可能希望 .789 显示为 0.8,但 789.0 显示为 789 而不是 800。
对于这类事情,你有一个方便的实用函数,或者对我上面的函数进行概括的建议吗?
相关:Suppressing a trailing "." in numerical output from Mathematica
更新:我试着在这里问这个问题的一般版本:
https://stackoverflow.com/questions/5627185/displaying-numbers-to-non-technical-users
【问题讨论】:
-
也许我真正想要的是指定一个精度,无论小数点剩下多少位,加上 n。无论我最终使用什么,我都会发布作为答案;希望它对其他人有用。
-
关于显示n个有效数字:常规的旧NumberForm不做你想要的吗? NumberForm[123.456, 4] 给出 123.5,NumberForm[0.00123456, 4] 给出 0.001235。如果没有,您能否更详细地指定您想要的行为?
-
关于在“小数点前后”指定有效数字...您能在这里解释一下您想要的确切行为吗,也许还有更多示例?
-
嗯,NumberForm 不是我想要的,因为我希望 0.1234 显示为 .12,但 1234 显示为 1234,而不是 1200。我想我希望有效数字的数量取决于多少位数是小数点的左边。也许我真正追求的只是“抑制小数点后多余的、过于精确的数字”。
-
这个怎么样:我想指定 n 位精度,但被限制在 il 和 il+m 之间,其中 il 是整数部分的位数。如果我不希望小数点右侧有超过 2 个有效数字,则 m 可能是 2,如果我想完全删除超过 1000 的数字的小数部分,n 可能是 4。
标签: wolfram-mathematica utilities