格式化我想要的数字

时间:2011-11-03 11:05:16

标签: matlab floating-point rounding precision number-formatting

我有号码:a = 3.860575156847749e+003;,我会以正常方式显示它。所以我写b = sprintf('%0.1f' a);。如果我打印b,我会得到:3860.6。太棒了。事实上,虽然a是双重类型,但b已在char中转换。

如何正确格式化该数字并且仍有最终结果的数字?

祝你好运

2 个答案:

答案 0 :(得分:5)

嗯,您必须区分数值(存储在计算机内存中的数字)和十进制表示(您在屏幕上看到的字符串/字符数组)。您无法在数字上强加格式:数字的值可以用不同的方式表示为字符串(例如1234 = 1.234e3 = 12.34e2 = 0.1234e4 = ...)。

如果要存储精度较低的数字,可以使用roundfloorceil来计算精度低于原始数字的数字。 例如。如果你有a = 3.860575156847749e+003并且你想要一个只有5位有效数字的数字,你可以使用round

a = 3.860575156847749e+003;
p = 0.1; % absolute precision you want
b = p .* round(a./p)

这将产生一个变量b = 3.8606e3,它可以用不同的方式表示,但在第五个数字之后应该包含零(实际上:非常小的值有时是不可避免的)。我认为这就是你真正想要的,但请记住,对于一台计算机,这个数字也等于3.86060000(它只是同一个值的另一个字符串表示),所以我想再次强调十进制表示不是通过舍入数字来设置,而是通过(隐式)调用将double转换为字符串的函数来设置,该函数由sprintfdisp或可能的其他函数发生。

答案 1 :(得分:0)

sprintf y文本变量的结果。您是否尝试将变量声明为整数(例如)并将其用作sprintf指令的返回值?

这对您有用:http://blogs.mathworks.com/loren/2006/12/27/displaying-numbers-in-matlab/