2012-07-09 13 views
0
>> a = 12.5 * 9.45 

a = 

    1.181250000000000e+02 

>> round(a * 100) /100 

ans = 

    1.181200000000000e+02 

四捨五入的值應該是118.13,而不是118.12。MatLab - 9.45表示和回合

如果你在MATLAB命令行中鍵入9.45,它不能代表:

>> 9.45 

ans = 

    9.449999999999999 

如果我設置了數字格式做空,最終的結果是一樣的。

>> a = 12.5 * 9.45 

a = 

    118.1250 

>> round(a * 100)/100 

ans = 

    118.1200 

有人可以解釋嗎?任何解決方法?

+2

浮點數的結果......你永遠不會得到與他們 – 2012-07-09 20:00:22

+0

100%準確的結果,這是一個浮點限制,是在一個完全正常的痛屁股。 – Wug 2012-07-09 20:01:53

回答

3

你可以試試類似John D'Errico's hpf class

這會給你期待

round(hpf('12.5') * hpf('9.45') * 100)/100 
ans = 
118.13 


F = hpf('9.45') 
F = 
9.45 
+0

實際上,hpf中也有一個roundn工具,所以你不需要做乘法和除法技巧。 roundn(hpf('12.5'​​)* hpf('9.45'), - 2)= 118.13 – 2012-07-10 01:37:46

0

聽起來像你有一些設置,你的輸出精度搞亂。它看起來像你當前的設置需要15位小數(可能longG)?,並與MATLAB的浮點數,你不會得到100%的精度。

您可以更改顯示輸出的格式,但無論如何精度都會成爲該級別的問題。 The relevant documentation.

+0

我的設置設置爲很長,但如果我將其設置得較短,最終結果是相同的。我的118.12應該是118.13。我會更新這個問題。 – Johnny5 2012-07-09 20:12:07