為什麼需要寫 finally那段
try
{
}
catch (Exception e)
{
}
finally
{
DoSomeClose();
}
如果寫成
try
{
}
catch (Exception e)
{
}
DoSomeClose();
不也一樣嗎?我就是要在try catch之後去執行DoSomeClose();
事實上確實不同,finally確實有其特別之處
少了他,如果try或catch之中,有直接寫了return
那就不會執行DoSomeClose();
finally則會強制在你即便要return跳離開這段程式碼之前,也會先執行finally裡面的程式的
我喜歡設計,我喜歡創造,我喜歡美 不論軟體設計,不論介面設計,不論產品規劃設計,我都很有興趣 一直希望能能用這份專長,好好發揮在職場上。讓我做的快樂。 不論寫程式,或是做美工,我都很喜歡,希望我可以有機會雙線。兩種都很擅長。
2015年7月29日 星期三
2015年7月15日 星期三
多國語言小數點符號處理
撰寫多國語系的軟體,必須注意到一些特殊處理事項
本篇所針對的數值呈現問題,將可能造成很嚴重的後果
首先,先明白數值表示法這件事情,在某些歐洲或美洲、東南亞地區數值的小數點符號,並不是「.」,而是「,」,所以當你的程式輸出檔案或者顯示在主控台的時候,會出現312.566被顯示成312,566 這種情形。如下圖的
fValue
這樣的狀況並不只是看起來怪怪的而已,更嚴重的是,如果你要下SQL指令,而且你的指令並不是透過SqlCommand物件的正規使用方式來進行,而是自己串出SQL指令的話,就會讓指令失敗,由於你的數值如果帶有小數點,會變成逗號,這會讓SQL指令被誤解析。
比方
sb.Append("INSERT
INTO TB_RECORD_RAW VALUES (").Append(intIoId).Append(",").Append(douValue).Append(");”).
原本預期輸出
INSERT
INTO TB_RECORD_RAW VALUES ( 123, 194.566 );
但結果會輸出
INSERT
INTO TB_RECORD_RAW VALUES ( 123, 194,566 );
這會讓SQL誤判有三個參數要Insert,但是實際上只有兩個。結果要不就是填錯欄位,要不就會新增失敗(也許欄位不夠多)。
解決這個問題有兩種方式,要不就是透過SqlCommand物件的正規使用方式來進行。要不就是透過修改數值顯示方式(各國有各種特定的表示方式,可以在程式中強制統一),底下針對修改數值顯示方式來介紹。
CultureInfo TheCulture = new CultureInfo("en-US",
false);
NumberFormatInfo NumFmtInf = TheCulture.NumberFormat;
NumFmtInf.NumberDecimalSeparator = ".";
NumFmtInf.NumberDecimalDigits = 10;
Double TestDot_ Double = 123.4567;
String Str_Result
= String.Format(TheCulture, "{0:F}", TestDot_Double);
透過CultureInfo所建立的物件,會存放著作業系統的文化語言相關設定,指定為"en-US"是美國 “zh-TW“則是台灣所有語言列表於http://www.csharp-examples.net/culture-names/
也可以客制化的修改小數點符號,也可指定浮點數一律顯示到小數點後第幾位,這邊稍微要注意的是,當你在此指定了小數點後第幾位,則不足位數會補零,比方123.4567000000。如果不設定呢,則預設會顯示小數點兩位,進行四捨五入。
訂閱:
文章 (Atom)