2011-11-03 51 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或其他一些函數來實現。

相關問題