2011-07-12 32 views
0

在我的數據庫中,我有一個產品的價格列表 我把它作爲float,我的問題是,如果我保存它,因爲我的c#應用程序 爲10.50 ..在查詢返回10,50,如果我更新我得到一個錯誤 10,50不能轉換爲float ...或其他東西.. ,如果我將它保存爲decimal,在SQL管理中的查詢..沒關係.. ,但在我的C#應用​​程序...我得到同樣的錯誤.. 10.50 retuns爲10,50我不知道爲什麼,以及如何解決它..我的獨特的解決方案是保存它作爲 ... varcharsql type float,real,decimal?

+0

不使用浮動價格。你在用什麼數據庫? –

回答

0

我覺得你的設置中窗口區域和語言爲十進制符號是錯誤的。請將其設置爲點並再次測試它。

1

這是某種本地化問題。 10,50是寫作十年半的「歐洲」寫作方式。如果你從你的select聲明中得到那個,那麼你的數據庫可能配置不正確。

1

一般而言,您應該在整個圖層中使用相同的類型。因此,如果數據庫中的基礎類型爲x,那麼您應該在c#中傳遞具有相同類型的數據。

你選擇什麼類型取決於你正在存儲的內容 - 你不應該爲了讓某些東西「工作」而轉換類型。爲此,以非數字類型(例如varchar)存儲數字數據將很快回來咬你。你已經打開這個問題來解決這個問題了!

正如其他人奇蹟般地推斷,您可能會遇到本地化問題。這是爲什麼以字符串形式存儲數字是個問題的一個很好的例子。如果您正確地接受用戶輸入的文化/本地化(或者您想要的),並將其轉化爲數字類型的變量,那麼其餘(與數據庫交談)應該很容易。更重要的是,如果你可以幫助你的話,你不應該在數據庫中進行數字格式化 - 這些東西在前端更接近用戶。

0

這可能助陣臨時使用,但我不會推薦它的永久使用:

試着做,這樣你保存文件之前,轉換爲數字爲字符串,替換期的逗號(From,to。),然後以字符串的形式保存到數據庫中,希望它能看到它的格式正確,並將其轉化爲數據庫所看到的「Decimal」或「Floating」。

希望這會有所幫助。

0

是的,本地化。

這就是說,我認爲你的pice被存儲在SQLServer的「money」字段中(我假設它是你正在使用的SQLServer)。如果這是DB中的浮點數,它將返回一個正常的小數點,而不是歐洲貨幣分隔符「,」。

修復: 拳頭不要在你的C#代碼中使用FLOAT,除非你絕對需要浮點數。改爲使用十進制類型。這不僅僅是在這種情況下,而是在所有情況下。浮點數是二進制(基數爲2),而不是十進制(基數爲10),所以您在界面中看到的只是實際數字的十進制近似值。其結果是頻繁出現(1 == 1) evaluates as false!

我自己也遇到過這個問題,如果你不知道會發生這種情況,那真讓人生氣。在c#中總是使用decimal而不是float

好吧,你已經固定之後,再這樣做是爲了得到正確的定位:

using System.Globalization; 
... 

NumberFormatInfo ni = new NumberFormatInfo(); 
ni.CurrencyDecimalSeparator = ","; 
decimal price = decimal.Parse(dbPriceDataField, ni); 

注意,「dbPriceDataField」必須是一個字符串,所以你可能必須做」的ToString( )「在該數據庫結果集的字段。

如果你最終不得不處理這些錢場的其他「錢」方面,如貨幣符號,請上網:http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx

如果您需要更強大的錯誤處理,要麼把那decimal.Parse在try/catch,或者使用decimal.TryParse。

編輯 -

如果你知道什麼是文化(實際上,國家),數據庫設置,你可以做到這一點,而不是:

using System.Globalization; 
... 
CultureInfo ci = new CultureInfo("fr-FR"); // fr-FR being "french France" 
decimal price = decimal.Parse(dbprice, ci.NumberFormat); 
0

這樣的問題是在我的網站所面臨的我Apps ...但我發現解決方案就像我在文本框中獲取價格值。所以我有數據庫附加。所以當你用文本框連接你的數據庫時...當你右鍵單擊文本框,然後單擊編輯DataBinding ....在那你必須提供....類型像綁定屬性..... {0:N2}

這將只適用於網絡應用程序或網站...不適用於桌面應用程序...

+0

您的數據庫將不會涉及太多,如果它與此值一致的值....所以不是浮點數或小數的問題....但我使用了小數(5,2)數據類型... – DShah

相關問題