Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 显示具有指定有效位数的数字_Wolfram Mathematica_Utilities - Fatal编程技术网

Wolfram mathematica 显示具有指定有效位数的数字

Wolfram mathematica 显示具有指定有效位数的数字,wolfram-mathematica,utilities,Wolfram Mathematica,Utilities,我使用以下函数将数字转换为字符串以便于显示(不要使用科学记数法,不要使用尾随点,按规定进行舍入): (请注意,re是RegularExpression的别名) 这几年来一直在为我服务。 但有时我不想指定要舍入的位数,而是想指定一些有效数字。 例如,123.456应显示为123.5,但0.00123456应显示为0.001235 为了让人觉得有趣,我可能想指定小数点前后的有效数字。 例如,我可能希望.789显示为0.8,但789.0显示为789而不是800 对于这类事情,你有没有一个方便的实用函数

我使用以下函数将数字转换为字符串以便于显示(不要使用科学记数法,不要使用尾随点,按规定进行舍入):

(请注意,
re
RegularExpression
的别名)

这几年来一直在为我服务。 但有时我不想指定要舍入的位数,而是想指定一些有效数字。 例如,123.456应显示为123.5,但0.00123456应显示为0.001235

为了让人觉得有趣,我可能想指定小数点前后的有效数字。 例如,我可能希望.789显示为0.8,但789.0显示为789而不是800

对于这类事情,你有没有一个方便的实用函数,或者是对我上面的函数进行推广的建议

相关的:

更新:我试着在这里问这个问题的一般版本:

这可能不是完整的答案(您需要将字符串从/转换为字符串),但此函数接受参数一个数字
x
和所需的有效数字
sig
。它保留的位数为
sig
的最大值或小数点左边的位数

A[x_,sig_]:=NumberForm[x, Max[Last[RealDigits[x]], sig]]

德雷夫斯,我想我终于明白你想要什么了,而且你已经差不多明白了。如果没有,请再次尝试解释我遗漏了什么

shn2[x_, r_: 0] := 
 StringReplace[
  ToString@NumberForm[x, r, ExponentFunction -> (Null &)], 
  RegularExpression@"\\.0*$" -> ""]
测试:

shn2[#, 4] & /@ {123.456, 0.00123456}
shn2[#, {3, 1}] & /@ {789.0, 0.789}
shn2[#, {10, 2}] & /@ {0.1234, 1234.}
shn2[#, {4, 1}] & /@ {12.34, 1234.56}

Out[1]= {"123.5", "0.001235"}

Out[2]= {"789", "0.8"}

Out[3]= {"0.12", "1234"}

Out[4]= {"12.3", "1235"}

这是我原始函数的一个可能的推广。 (我已经确定它不等同于Wizard先生的解决方案,但我还不确定我认为哪个更好。)

测试: 在这里,我们指定4个有效数字,但决不在小数点左侧删除任何有效数字,也决不在小数点右侧使用超过2个有效数字

(# -> shn[#, 2, 4])& /@ 
  {123456, 1234.4567, 123.456, 12.345, 1.234, 1.0001, 0.123, .0001234}

{  123456 -> "123456", 
 1234.456 -> "1234", 
  123.456 -> "123.5"
   12.345 -> "12.35", 
    1.234 -> "1.23", 
   1.0001 -> "1", 
    0.123 -> "0.12", 
0.0001234 -> "0.00012" }

也许我真正想要的是指定一个精度,即小数点的剩余位数加上n。无论我最终使用什么,我都会将其作为答案发布;希望它对其他人有用。关于显示n个重要数字:常规的旧数字格式不符合你的要求吗?数字形式[123.456,4]给出123.5,数字形式[0.00123456,4]给出0.001235。如果没有,您能更详细地指定您想要的行为吗?关于指定有效数字“小数点之前和之后”。。。你能在这里解释一下你想要的确切行为吗,也许再举一些例子?嗯,NumberForm不是我想要的,因为我希望0.1234显示为.12,但1234显示为1234,而不是1200。我想我希望有效数字的数量取决于小数点的剩余位数。也许我真正想要的只是“抑制小数点后多余的、过于精确的数字”。这样如何:我想指定n个精度数字,但被剪裁为介于il和il+m之间,其中il是整数部分的位数。如果我不希望小数点右边有超过2个有效数字,那么m可能是2;如果我希望删除1000以上数字的小数部分,那么n可能是4。@MrWizard:假设我希望12.34显示为12.3,但1234.56显示为1235。我基本上是说,我想要小数点右边有一个数字,除非左边已经有足够的有效数字。(感谢您的帮助!)@dreeves该案件处理正确。请参阅我答案中“测试”下的
Out[4]
。啊,对不起,shn2[.000123,{3,2}]怎么样?我不想将微小的数字显示为零,也不想将小数点左边的有效数字替换为零。我相信你的shn2不能用相同的参数设置同时做这两件事?看看我刚才附加在问题后面的要求。再次感谢,并为这个非常不恰当的问题感到抱歉@德雷夫很抱歉回答了三次错误的问题!我想你现在有解决办法了吧?是否真的需要修改
Clip
,或者你可以直接使用
shn[x_u?NumericQ,d_∶1*^6,t_∶1*^6]
,因为我无法想象需要超过一百万位数字?@MrWizard:完全是我的错!非常感谢你的帮助。啊,避免对剪辑进行修改是个好主意,尽管我认为这些修改无论如何都是好的。+1。美好的您似乎删除了一个获得一票的答案,然后创建了这个新答案。通常最好编辑旧的答案内容,除非很少,当你想保留两个完全不同的答案时。@belisarius抱歉。这是否意味着我删除的答案仍然对每个人可见,而不仅仅是我?是否有我忽略的网站指南列表?还有,有没有办法发送私人信息?我知道聊天,但这需要用户同时在线。你删除的答案仅对代表积分超过10000的人可见。您的“聊天联系人”可能与。至于私人信息,答案很简单:不。指南等一般都在网站上(很多内容)。很酷,谢谢。我的答案的剪辑部分试图概括一下这一点。我曾经IntegerLength@IntegerPart因为Last@RealDigits可能是负面的。
re = RegularExpression;

(* Show Number. Convert to string w/ no trailing dot. Use at most d significant
   figures after the decimal point. Target t significant figures total (clipped 
   to be at least i and at most i+d, where i is the number of digits in integer 
   part of x). *)
shn[x_, d_:5, t_:16] := ToString[x]
shn[x_?NumericQ, d_:5, t_:16] := With[{i= IntegerLength@IntegerPart@x},
  StringReplace[ToString@NumberForm[N@x, Clip[t, {i,i+d}],
                                    ExponentFunction->(Null&)],
                re@"\\.$"->""]]
(# -> shn[#, 2, 4])& /@ 
  {123456, 1234.4567, 123.456, 12.345, 1.234, 1.0001, 0.123, .0001234}

{  123456 -> "123456", 
 1234.456 -> "1234", 
  123.456 -> "123.5"
   12.345 -> "12.35", 
    1.234 -> "1.23", 
   1.0001 -> "1", 
    0.123 -> "0.12", 
0.0001234 -> "0.00012" }