2012-01-26 18 views
3

我想知道爲什麼我們正在使用的例子是使用混合小數和雙精度轉換爲十進制。只是將所有小數部分全部轉換並避免這些轉換會不會更簡單?想知道爲什麼我們使用的書是使用雙精度和小數而不是小數點

這是我很好奇的主要代碼塊。

decimal amount; 
decimal principal = 1000; 
double rate = 0.05; 

for (int year = 1; year <= 10; year++) 
{ 
    amount = principal * ((decimal) Math.Pow(1.0 + rate, year)); 
} 

是否存在我忽略的任何性能或準確性問題?

+5

Math.Pow沒有帶小數的重載。 – harold

回答

6

有沒有Math.Pow超載與decimal工程 - 上實數冪本質上是不準確的,所以它不會使所有多大意義了這樣的過載存在。

現在,因爲那裏rate則採用的是在計算複合係數(Pow調用)的唯一場所,它是有道理的,它被宣佈double - 更高的精度不會幫助,如果它要只是被「拋棄」。

變量的其餘部分代表的錢,這是用例的decimal(這就是爲什麼decimal文字後綴是M)。可以想象另一種計算方法,其中commmision$2.10被添加到amount--我們不希望這樣的計算變得不準確,因爲在一個討厭的(不準確的)複合利息計算中出於類型一致性的考慮。

因此不一致。

+0

啊,所以沒有。我理解'decimal'和'double'之間的主要區別,這就是爲什麼我問 - 我們已經在這個方程中使用了小數,所以兩者之間的性能增益是沒有意義的。謝謝。 – InsanityOnABun

2

十進制的範圍較小,但比雙精度更準確。十進制是你應該用來代表.Net中的錢。在你給出的例子中,金額和本金是貨幣價值。價格不是。因此,他們正在使用正確的數據類型。

這裏是MSDN上的十進制:MSDN Decimal

0

你應該閱讀this topic

什麼它歸結爲是:小數用於貨幣/當你需要在計算精度,而雙更適合於科學計算,因爲它執行得更好。

相關問題