2015-06-20 32 views
0

我所要做的計算在我的申請,我有formules像這樣的:做計算與NSDecimalNumber或浮動

result = Capital * rate/(1- 1/(1+ rate)^frequence) 

我在網上,這樣做計算浮筒可以無損已經閱讀。

我應該在我的情況下使用NSDecimalNumber嗎?

回答

1

所有數字,包括NSDecimalNumber只有一個特定的準確性。 Floats和Doubles是數字的二進制表示,它們可以分別代表23和52個二進制數字(大約7和16位十進制數字)。

這意味着某些數字不能精確表示。例如,請考慮1/3 - 要精確表示,您需要無限數量的數字(0.333333333333...)。

在大多數情況下,十六進制數字綽綽有餘,特別是當計算結果不必絕對精確時。精度也可能受計算順序的影響。

NSDecimalNumber最多可以容納30個十進制數字(它不代表二進制數字),因此它可以比Double更精確地保存數字。但是,NSDecimalNumber的計算不是在CPU上本地完成的,而且要慢得多。如果需要速度,這不是你想要做的事情。我們主要使用NSDecimalNumber進行貨幣計算,因爲我們需要高精度(尤其是在轉換爲二進制時,我們希望避免精度損失)。

+0

謝謝。如果我想要16位數字précision,使用浮點數或NSDecimalNumber會給出完全相同的結果嗎? – samir

+0

@samir Nope。一個會以十進制計算,一個以二進制計算。從十進制到二進制的轉換和返回將會有所不同。此外,你不能真正執行精確的16位精度。 – Sulthan