2011-09-29 59 views
0

我有一個應用程序,可以將項目成本從百萬美元降到幾十億美元。最初,用戶輸入項目估算值:稱爲「撥款額」。在C中轉換大的美元值#

問題是:
原始值未按預期轉換。一些例子包括:

他們進入式:111222333
它轉換爲:111222336

他們進入時間:111222333444
它轉換爲:111222333440

的問題Occurrs這裏:
該問題出現在轉換後的以下代碼行中...

project.AppropriationAmount = (!String.IsNullOrEmpty(txtAppropriationDollars.Text)) ? Convert.ToSingle(txtAppropriationDollars.Text) : 0; 

備註:
project.AppropriationAmountfloat

感謝您的幫助!

+0

任何職位空缺?我看到了一個機會。 –

+0

我懷疑這是問題......但你爲什麼使用Convert?只需使用'Single.Parse()'或'Single.TryParse()'。你不想轉換價值,你只是想解析它。 – qJake

+0

@Hans:超人III? –

回答

9

你應該使用decimal而不是float錢。

MSDN

十進制關鍵字表示一個128位的數據類型。與 浮點類型相比,小數類型具有更高的精度和更小的範圍,因此適用於財務和貨幣 計算。

使用Convert.ToDecimal(..)並指定給decimal變量爲您的示例生成了預期的(正確的)結果。

+0

+1同意。總是使用小數錢。 –

+0

我想問題是,十進制還適用於非常大的數字,如:111,222,333,444? –

+1

@PrisonerZERO:絕對。十進制可處理多達28位數字。 –