在我的數據庫中,我有一個產品的價格列表 我把它作爲float
,我的問題是,如果我保存它,因爲我的c#應用程序 爲10.50 ..在查詢返回10,50,如果我更新我得到一個錯誤 10,50不能轉換爲float
...或其他東西.. ,如果我將它保存爲decimal
,在SQL管理中的查詢..沒關係.. ,但在我的C#應用程序...我得到同樣的錯誤.. 10.50 retuns爲10,50我不知道爲什麼,以及如何解決它..我的獨特的解決方案是保存它作爲 ... varchar
sql type float,real,decimal?
回答
我覺得你的設置中窗口區域和語言爲十進制符號是錯誤的。請將其設置爲點並再次測試它。
這是某種本地化問題。 10,50
是寫作十年半的「歐洲」寫作方式。如果你從你的select
聲明中得到那個,那麼你的數據庫可能配置不正確。
一般而言,您應該在整個圖層中使用相同的類型。因此,如果數據庫中的基礎類型爲x
,那麼您應該在c#中傳遞具有相同類型的數據。
你選擇什麼類型取決於你正在存儲的內容 - 你不應該爲了讓某些東西「工作」而轉換類型。爲此,以非數字類型(例如varchar)存儲數字數據將很快回來咬你。你已經打開這個問題來解決這個問題了!
正如其他人奇蹟般地推斷,您可能會遇到本地化問題。這是爲什麼以字符串形式存儲數字是個問題的一個很好的例子。如果您正確地接受用戶輸入的文化/本地化(或者您想要的),並將其轉化爲數字類型的變量,那麼其餘(與數據庫交談)應該很容易。更重要的是,如果你可以幫助你的話,你不應該在數據庫中進行數字格式化 - 這些東西在前端更接近用戶。
這可能助陣臨時使用,但我不會推薦它的永久使用:
試着做,這樣你保存文件之前,轉換爲數字爲字符串,替換期的逗號(From,to。),然後以字符串的形式保存到數據庫中,希望它能看到它的格式正確,並將其轉化爲數據庫所看到的「Decimal」或「Floating」。
希望這會有所幫助。
是的,本地化。
這就是說,我認爲你的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);
這樣的問題是在我的網站所面臨的我Apps ...但我發現解決方案就像我在文本框中獲取價格值。所以我有數據庫附加。所以當你用文本框連接你的數據庫時...當你右鍵單擊文本框,然後單擊編輯DataBinding ....在那你必須提供....類型像綁定屬性..... {0:N2}
這將只適用於網絡應用程序或網站...不適用於桌面應用程序...
您的數據庫將不會涉及太多,如果它與此值一致的值....所以不是浮點數或小數的問題....但我使用了小數(5,2)數據類型... – DShah
- 1. C++ float到sql server DECIMAL正確轉換
- 2. 「type domain」和「real type」是什麼意思?
- 3. SQL Server上的T-SQL數據類型REAL FLOAT(n)
- 4. Decimal或Float的決定
- 5. mysql float type
- 6. SQL Server:將varchar轉換爲decimal/float時出錯
- 7. 版本號float,decimal或者雙
- 8. PHP float/double存儲爲MySQL DECIMAL
- 9. SQL DataType Negative Decimal
- 10. Modulo(%)與Decimal數據類型一起使用,但不與float或real一起使用。爲什麼?
- 11. 確實java.math.BigDecimal與sql server float type一起工作
- 12. 如何使sqlalchemy在反映表時返回float而不是decimal?
- 13. SQL DECIMAL到Java編號
- 14. Qt類型QML/real和C++/float之間的錯誤
- 15. 如何將Int/Decimal轉換爲C#中的float值?
- 16. Ruby on Rails - 如何將代碼從float移植到decimal?
- 17. 如何在數組PHP中翻轉STRING和decimal/float值?
- 18. 存儲統計數據,我需要DECIMAL,FLOAT還是DOUBLE?
- 19. Decimal,Float,Double或Varchar在數據庫中存儲價格金額?
- 20. 使用Swift在URL請求中提交Decimal/Float
- 21. Autofixture - 創建一個float,double或decimal,餘數爲
- 22. 在System.Windows.Forms.DataGrid中設置double/float/decimal的精度
- 23. SQL Float to Varchar
- 24. SQLite REAL錯誤
- 25. 將字符串類型轉換爲int,float,decimal等類型在運行時C#
- 26. SQL將real轉換爲INT,可以嗎?
- 27. ZODB In Real Life
- 28. c#sizeof decimal?
- 29. 如何在x86中使用pow(real,real)
- 30. 爲什麼cc「real time」>>「real time」?
不使用浮動價格。你在用什麼數據庫? –