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