2011-11-03 50 views
2

我有号码:a = 3.860575156847749e+003;,我会以正常的方式显示它。所以我写b = sprintf('%0.1f' a);。如果我打印b,我会得到:3860.6。太棒了。事实上,尽管a是双字型,b已经转换为字符型。格式化一个数字,因为我想

我能做些什么来正确格式化该数字并仍然有一个数字作为最终结果?

致以问候

回答

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可以以不同的方式来表示,但也应包含0(在实践中:在第五位数字之后,非常小的值有时是不可避免的)。我认为这就是你真正想要的,但请记住,对于一台计算机,这个数字也等于3.86060000(它只是另一个相同值的字符串表示),所以我想再次强调十进制表示不是由四舍五入数字,但通过(隐式地)调用一个函数将double转换为一个字符串,这可以通过sprintf,disp或其他一些函数来实现。

相关问题