close

這個是有關程式的內容,光看標題可能不是很好瞭解,有需要的人再進來看吧

這兩天遇到法國的客戶在使用我寫的軟體時,發生了"Invalid floating point operation"的錯誤訊息
但是當客戶把相同的檔案,拿回來到大陸及台灣這邊測試時
卻是一點問題都沒有

找了半天
才發現,原來是"小數符號"的問題

在大部份亞洲及美系國家設定的有的國家是 "."
而歐系國家是 ","
 
後來在 delphi.ktop 找到了一個 windowsAPI 的 function - GetLocaleInfo
目前測試後是可以使用
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ShowMessage(GetLocaleInformation(LOCALE_SDECIMAL));
}
 
String __fastcall TForm1::GetLocaleInformation(int iFlag)
{
    char * pcLCA;
 
    if( GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,iFlag,pcLCA,19) <= 0 )
    {
        pcLCA[0] = 0;
    }
    return pcLCA;
}


pcLCA 會回傳 iFlag 所代表值的字串
所以在台灣會回傳 "."
在法國會回傳 ","

而既然抓的到這個符號
那就可以做其它的應用了

也可以讓你的軟體不受個人及地方語系的設定而出錯

有興趣及有需要的人,可自行研究看看
 
上面那個紅色標示的地方,可以依照你想抓的值來換
OCALE_NOUSEROVERRIDE { do not use user overrides }
LOCALE_USE_CP_ACP { use the system ACP }
LOCALE_ILANGUAGE { 語言代號 }
LOCALE_SLANGUAGE { 本地語言名稱 }
LOCALE_SENGLANGUAGE { 語言的英語名 }
LOCALE_SABBREVLANGNAME { 語言名稱縮寫 }
LOCALE_SNATIVELANGNAME { 本地語言名稱 }
LOCALE_ICOUNTRY { 國家代號 }
LOCALE_SCOUNTRY { 國家名 }
LOCALE_SENGCOUNTRY { 國家的英語名稱 }
LOCALE_SABBREVCTRYNAME { 國家名縮寫 }
LOCALE_SNATIVECTRYNAME { 國家名 }
LOCALE_IDEFAULTLANGUAGE { 缺省語言代號 }
LOCALE_IDEFAULTCOUNTRY { 缺省國家代碼 }
LOCALE_IDEFAULTCODEPAGE { 缺省oem內碼表 }
LOCALE_IDEFAULTANSICODEPAGE { 缺省ansi內碼表 }
LOCALE_IDEFAULTMACCODEPAGE { 缺省mac頁 }
LOCALE_SLIST { 列表項分割符 }
LOCALE_IMEASURE { 測量單位0 = 米制, 1 = 英制 }
LOCALE_SDECIMAL { 小數點符號 }
LOCALE_STHOUSAND { 千位分割符 }
LOCALE_SGROUPING { digit grouping }
LOCALE_IDIGITS { number of fractional digits }
LOCALE_ILZERO { leading zeros for decimal }
LOCALE_INEGNUMBER { 負數模式 }
LOCALE_SNATIVEDIGITS { native ascii 0-9 }
LOCALE_SCURRENCY { 本地貨幣符號 }
LOCALE_SINTLSYMBOL { 國際貨幣符號 }
LOCALE_SMONDECIMALSEP { 貨幣小數點分割符 }
LOCALE_SMONTHOUSANDSEP { 貨幣千位分割符 }
LOCALE_SMONGROUPING { monetary grouping }
LOCALE_ICURRDIGITS { # local monetary digits }
LOCALE_IINTLCURRDIGITS { # intl monetary digits }
LOCALE_ICURRENCY { positive currency mode }
LOCALE_INEGCURR { negative currency mode }
LOCALE_SDATE { 日期分割符 }
LOCALE_STIME { 時間分割符 }
LOCALE_SSHORTDATE { 短日期字串 }
LOCALE_SLONGDATE { 長日期字串 }
LOCALE_STIMEFORMAT { time format string }
LOCALE_IDATE { short date format ordering }
LOCALE_ILDATE { long date format ordering }
LOCALE_ITIME { time format specifier }
LOCALE_ITIMEMARKPOSN { time marker position }
LOCALE_ICENTURY { century format specifier (short date) }
LOCALE_ITLZERO { leading zeros in time field }
LOCALE_IDAYLZERO { leading zeros in day field (short date) }
LOCALE_IMONLZERO { leading zeros in month field (short date) }
LOCALE_S1159 { AM designator }
LOCALE_S2359 { PM designator }
LOCALE_ICALENDARTYPE { type of calendar specifier }
LOCALE_IOPTIONALCALENDAR { additional calendar types specifier }
LOCALE_IFIRSTDAYOFWEEK { first day of week specifier }
LOCALE_IFIRSTWEEKOFYEAR { first week of year specifier }
LOCALE_SDAYNAME1 { long name for Monday }
LOCALE_SDAYNAME2 { long name for Tuesday }
LOCALE_SDAYNAME3 { long name for Wednesday }
LOCALE_SDAYNAME4 { long name for Thursday }
LOCALE_SDAYNAME5 { long name for Friday }
LOCALE_SDAYNAME6 { long name for Saturday }
LOCALE_SDAYNAME7 { long name for Sunday }
LOCALE_SABBREVDAYNAME1 { 星期一的縮寫 }
LOCALE_SABBREVDAYNAME2 { 星期二的縮寫 }
LOCALE_SABBREVDAYNAME3 { 星期三的縮寫 }
LOCALE_SABBREVDAYNAME4 { 星期四的縮寫 }
LOCALE_SABBREVDAYNAME5 { 星期五的縮寫 }
LOCALE_SABBREVDAYNAME6 { 星期六的縮寫 }
LOCALE_SABBREVDAYNAME7 { 星期天的縮寫 }
LOCALE_SMONTHNAME1 { long name for January }
LOCALE_SMONTHNAME2 { long name for February }
LOCALE_SMONTHNAME3 { long name for March }
LOCALE_SMONTHNAME4 { long name for April }
LOCALE_SMONTHNAME5 { long name for May }
LOCALE_SMONTHNAME6 { long name for June }
LOCALE_SMONTHNAME7 { long name for July }
LOCALE_SMONTHNAME8 { long name for August }
LOCALE_SMONTHNAME9 { long name for September }
LOCALE_SMONTHNAME10 { long name for October }
LOCALE_SMONTHNAME11 { long name for November }
LOCALE_SMONTHNAME12 { long name for December }
LOCALE_SMONTHNAME13 { long name for 13th month (if exists) }
LOCALE_SABBREVMONTHNAME1 { 一月的縮寫 }
LOCALE_SABBREVMONTHNAME2 { 二月的縮寫 }
LOCALE_SABBREVMONTHNAME3 { 三月的縮寫 }
LOCALE_SABBREVMONTHNAME4 { 四月的縮寫 }
LOCALE_SABBREVMONTHNAME5 { 五月的縮寫 }
LOCALE_SABBREVMONTHNAME6 { 六月的縮寫 }
LOCALE_SABBREVMONTHNAME7 { 七月的縮寫 }
LOCALE_SABBREVMONTHNAME8 { 八月的縮寫 }
LOCALE_SABBREVMONTHNAME9 { 九月的縮寫 }
LOCALE_SABBREVMONTHNAME10 { 十月的縮寫 }
LOCALE_SABBREVMONTHNAME11 { 十一月的縮寫 }
LOCALE_SABBREVMONTHNAME12 { 十二月的縮寫 }
LOCALE_SABBREVMONTHNAME13 { 十三月的縮寫(如果有的話) }
LOCALE_SPOSITIVESIGN { 正號 }
LOCALE_SNEGATIVESIGN { 負號 }
LOCALE_IPOSSIGNPOSN { 正號位置 }
LOCALE_INEGSIGNPOSN { 負號位置 }
LOCALE_IPOSSYMPRECEDES { mon sym precedes pos amt }
LOCALE_IPOSSEPBYSPACE { mon sym sep by space from pos amt }
LOCALE_INEGSYMPRECEDES { mon sym precedes neg amt }
LOCALE_INEGSEPBYSPACE { mon sym sep by space from neg amt }
LOCALE_FONTSIGNATURE { font signature }
LOCALE_SISO639LANGNAME { ISO 縮寫語言名稱 }
LOCALE_SISO3166CTRYNAME { ISO 縮寫國家名稱 }

 

arrow
arrow
    全站熱搜

    brian6724 發表在 痞客邦 留言(0) 人氣()