摘要:C#. Net 將字串轉成整數String To Int32 轉到頭都暈了的資料型態轉換!
轉到頭都暈了的資料型態轉換!
這天,為了讓SQL與程式的功能作區分,畢竟資料庫負責處理資料,而程式是負責運算,為了讓雙方回歸到基本的運作模式,因此嘗試著重新編譯程式,卻發現之前資料庫的語法編譯之後雖然造成程式效能不彰,但卻讓程式簡單的幾句就達到我要的結果(簡單的說..就是資料庫我讓他進行不少的運算,最後再將接近結果的資料表丟給程式做最後的運算跟寫入資料庫。)
仔細想想,乾脆就都用資料庫就好啦(其實是辦的到的!)但這樣跟原本設定要給USER隨時上傳資料的意義就消失了。(反正我是程式新手..就用不同的狀況讓我更瞭解C#語法吧!)
言歸正傳,這次遇到的問題是當我從資料庫中提取一出Decimal的資料,但轉入到程式中出現了以下錯誤訊息:”將字串轉換為DataTime時…或是需要的型別是Int32…與輸入的字串格式不正確…“,大冒險就開始了,瘋狂的查詢與測試後(就是要用程式解決啦!!)不過還是沒解決資料載入時的資料型態問題>”<
例如:
DB Data1 : 60.000000 ==> 60
DB Data2 : 22.000000 ==> 22
從資料庫取出到DataTable中變成字串,簡單看起來應該是我的資料來源被當成String,但是我要他是Int32。
因此我做了轉成整數的動作
String ABC = 123. 000000;
int PHAMTF = new int();
PHAMTF = int.Parse(ABC);
但是,還是出現錯誤訊息”需要的型別是Int32”,我想主要的原因應該是我的資料是有小數點的(這也被系統當作是時間型態?),翻閱文件後,我將語法改為:
首先先增加using System.Globalization 命名空間
System.Globalization 命名空間 (Namespace) 包含定義文化特性相關資訊的類別,包括語言、國家/地區、使用中的曆法、日期、貨幣和數字格式模式,以及字串的排序順序。
String ABC = 123. 000000;
int PHAMTF = new int();
PHAMTF = int.Parse(ABC, NumberStyles.AllowDecimalPoint);
輸出結果:123
詳細說明請參閱TechNet:
Int32.Parse 方法 (String, NumberStyles)
http://msdn.microsoft.com/zh-tw/library/c09yxbyt.aspx
Convert 類別(將基底資料型別轉換為其他基底資料型別。)
http://msdn.microsoft.com/zh-tw/library/system.convert(v=VS.80).aspx
結果就只取出整數出來,當然程式就跑過啦!,但是萬一要是哪天我的資料來源值是真的要用到Decimal的時候…..我該怎麼辦咧!!
PS:改寫途中,其中一度想放棄,乾脆用資料庫語法CAST 和 CONVERT (Transact-SQL)來直接修正欄位值,將欄位值直接改成Int ,這樣我接資料就沒問題啦……
---範例語法(複製後貼上SSMS執行即可)----
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(@myval AS Int) AS Myval
-- Or, using CONVERT
SELECT CONVERT(int, @myval) AS Myval
改天在來好好寫一篇關於CAST 和 CONVERT (Transact-SQL)
詳細說明請參閱TechNet:http://msdn.microsoft.com/zh-tw/library/ms187928.aspx
後記:仔細想想,應該是我對於程式中,資料的來源、承接、型態、結構、方法等..所有東西都不熟悉所導致的吧@@,以致於我根本不知道要修正哪裡的錯誤來解決問題…都是用猜的跟用矇的……
水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。