StrToFloat在德语版系統的怪問題 |
答題得分者是:eaglewolf
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
我寫的一個RS232程式,大概會碰到把字符型的"035.1"用StrTofloat轉換成浮點型的35.1,在我的中文windows下面運行都沒有問題,但是產品賣到德國去用德文版和英文版的windows卻都出錯,提示"035.1"不是一個有效的浮點類型,請問為什么?如何解決,是不是要先對字符串格式化成“35.1”?我在網上也搜索到有人問類似問題,難道StrToFloat在德語版的windows不兼容?
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
問題其實是出在
德國的小數點符號是 "," 千位元符號是"." 剛好與一般認知相反 解決方法 一種是請user 修改控制台中 的地區及語言選項(應該不太可行) 另一種是在轉成float之前先用AnsiReplaceStr轉成德國的表示法
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
|
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
syntax大大及pedro756901大大不是已經有說了嗎?
利用GetLocaleInfo函式取得該語系的數值格式 再轉換成該語系的數值格式~ ===================引 用 oktony 文 章=================== 原來如此!我看了一下,世界很多地方都有各自的表示方式,那豈不是要根據每一個國家去load設置?好麻煩啊,有沒有什麽更好的方法,謝謝了!
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL
編輯記錄
eaglewolf 重新編輯於 2007-08-10 17:14:09, 註解 無‧
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
在windows控制面板的區域和語言選項中的區域選項可以看到有120多個區域設置,每個區域對應的數字表現形式都有不同,在下方的示例可以看到,雖然就是小數點“,”和"."這兩種表示方式而已,但是我覺得GetLocalInfo后每個區域都要去一一對應設置也覺得很麻煩耶,這邊有篇文章講解http://www.utf.com.cn/article/s13-2,里面談到TsiLang這個插件,但是我還不會用...
調控制臺是有用,但總不能叫每個用戶去改成指定區域..stallion版主太謙虛了,要test這個問題,只要在控制面板把區域改成德國,然后放一個button在form里,寫strtofloat('2.33')運行后即可發現出錯 |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
利用 GetLocaleInfo 取得 strThousand(千位元符號),strDot(小數點符號) , strNegative(負數符號)等
strData := AnsiReplaceStr(strData,',', '%THOUSAND%'); strData := AnsiReplaceStr(strData,'.', '%DOT%'); strData := AnsiReplaceStr(strData,'-', '%NEGATIVE%'); strData := AnsiReplaceStr(strData,'%THOUSAND%', strThousand'); strData := AnsiReplaceStr(strData,'%DOT%', strDot); strData := AnsiReplaceStr(strData,'%NEGATIVE%', strNegative); fltData := StrToFloat(strData); ===================引 用 oktony 文 章=================== 這個我明白,我的意思全世界有120多個語言區域,用GetLocalInfo后,是不是要根據每個區域的格式做一個很長的switch來轉換?
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
oktony
中階會員 發表:67 回覆:132 積分:64 註冊:2004-12-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |