2012-05-16 41 views
10

我需要比較兩個值。 其中一個值爲price,它代表某物的當前價格等decimal,因爲您實際上可以通過此價格購買或出售某物。來比較雙倍和小數,我應該投擲雙倍到十進制或小數雙倍?

的另一值爲estimatedPrice這是數學計算的結果,所以double,因爲它只是estimation,並通過該esitmatedPrice

現在我想買如果price < estimatedPrice你不能真正做任何「行動」。

所以我應該把價格加倍或估價到小數?

據我所知,鑄造後我會得到「略有另一個」的數字,但似乎我沒有其他選擇。

+0

@BlueChippy如果物品價格昂貴,您不能使用浮動價格數據。例如,float不能表示'123456.78'。 – phoog

+0

十進制佔用更多的內存,具有更小的範圍,因此可以「更精確」(取決於您對「精確」的看法)與浮點(浮點/雙精度)相比更有意義的數字。 如果您願意,您可以非常高興地使用雙數值或小數點或浮點數,特別是如果價格總是要小數點後兩位。 你不能明確地將任何浮點數轉換爲十進制數(因爲它們是完全不同的東西),所以在這種情況下可能最好爲所有類型選擇一個浮點數。將它留給別人來推薦哪一個! (我會去小數,親自) – BlueChippy

+0

@phoog真的,取決於場景。我個人的首要任務是小數(首選)或雙重......但如果可能的話,在整個董事會中使用這種類型。 – BlueChippy

回答

11

這取決於數據。十進制具有更高的精度;雙倍有更大的範圍。如果double可能不在十進制範圍內,則應該將小數轉換爲double(或者,如果double值超出小數範圍,則實際上可以編寫一個返回結果而不投射的方法;請參見下面的示例)。

在這種情況下,double值似乎不太可能在小數範圍之外,所以(尤其是因爲您使用的是價格數據),您應該將double轉換爲decimal。

例(可以使用一些邏輯來處理NaN值):

private static int Compare(double d, decimal m) 
{ 
    const double decimalMin = (double)decimal.MinValue; 
    const double decimalMax = (double)decimal.MaxValue; 
    if (d < decimalMin) return -1; 
    if (d > decimalMax) return 1; 
    return ((decimal)d).CompareTo(m); 
} 
0

我從來沒有使用過軟件的價格,但從我聽說的許多與整數處理。例如,對於1.23美元,將其存儲爲整數123.將結果輸出給用戶時,轉換爲小數將在最後完成。

同樣,對於您的估計價格,你能處理(比如說)100倍的數字嗎?

+0

這可能是一個很好的優化,但是現在我應該把double加到decimal或者decimal加倍。此外,我猜可能'小數'裏面使用'int',所以它會更容易使用'小數'的價格。 – javapowered

1

我建議你轉換爲十進制。因爲它似乎你想操縱貨幣價值。但我可以給出這個簡短的答案:爲了準確(專爲金融應用程序操縱貨幣價值)應用程序使用十進制。如果你喜歡更少的資源和更多的速度使用雙倍。