我有號碼: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/