我有号码:a = 3.860575156847749e+003;
,我会以正常的方式显示它。所以我写b = sprintf('%0.1f' a);
。如果我打印b
,我会得到:3860.6
。太棒了。事实上,尽管a
是双字型,b
已经转换为字符型。格式化一个数字,因为我想
我能做些什么来正确格式化该数字并仍然有一个数字作为最终结果?
致以问候
我有号码:a = 3.860575156847749e+003;
,我会以正常的方式显示它。所以我写b = sprintf('%0.1f' a);
。如果我打印b
,我会得到:3860.6
。太棒了。事实上,尽管a
是双字型,b
已经转换为字符型。格式化一个数字,因为我想
我能做些什么来正确格式化该数字并仍然有一个数字作为最终结果?
致以问候
好了,你有串/字符数组,你就看到两个数值(存储在计算机的内存数量)和它的十进制表示(区分你屏幕)。您无法在数字上加上格式:数字的值可以用不同的方式表示为字符串(例如1234 = 1.234e3 = 12.34e2 = 0.1234e4 = ...
)。
如果你想存储精度较低一些,你可以使用round
,floor
,ceil
计算一些具有比原来的号码精度要求不高。 例如如果你有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
可以以不同的方式来表示,但也应包含0(在实践中:在第五位数字之后,非常小的值有时是不可避免的)。我认为这就是你真正想要的,但请记住,对于一台计算机,这个数字也等于3.86060000
(它只是另一个相同值的字符串表示),所以我想再次强调十进制表示不是由四舍五入数字,但通过(隐式地)调用一个函数将double转换为一个字符串,这可以通过sprintf
,disp
或其他一些函数来实现。
sprintf是文本变量的结果。你有没有尝试将一个变量声明为整数(例如)并将其用作sprintf指令的返回值?
这可能是对你有用:http://blogs.mathworks.com/loren/2006/12/27/displaying-numbers-in-matlab/