我想将一个数字转换为小数点右边最多 15位的字符串.通过顶多我的意思是,如果最后的数字是全零是没用的,打印出来.
例如:
sprintf('%.15f', 3.0001)
==> '3.000100000000000'
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好,但是这里所有的尾随数字都是零,我会更喜欢:
==> '3.0001'
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来使用sprintf格式说明符,或者我应该手动后处理输出以删除尾随零?
注意:我正在使用matlab,以防有任何其他替代方案sprintf.
只需使用g而不是f:
sprintf('%.15g', 3.0001)
ans =
3.0001
Run Code Online (Sandbox Code Playgroud)
从 doc sprintf
对于低于0.0001(1e-4)的数字,上述方法失败,在这种情况下,另一种解决方案是使用%f,然后regexprep在这里它替换一个以上的零,后跟一个带空格的空格:
str = sprintf('%.15f ',mat);
str = regexprep(str,'[0]+ ',' ')
Run Code Online (Sandbox Code Playgroud)
此方法还存在一个问题,即数字低于5e-16(这样小数点右边只有15位数的零)删除了这些有效数字.
要解决此问题而不是盲目地替换零,我们可以替换1-9范围内的数字,后跟一个或多个零,然后替换带有该数字后跟空格的空格:
str = sprintf('%.15f ',mat);
str=regexprep(str,'([1-9])[0]+ ','$1 ')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2259 次 |
| 最近记录: |