2009-02-10 76 views
4

我需要將輸入到網頁表單中的浮點值與範圍進行比較。問題是客戶端計算機可能有不同的區域設置,這意味着用戶可能會使用「。」或「,」將整數部分與十進制數字分開。如何比較依賴語言環境的浮點數?

有沒有簡單的方法來做到這一點?因爲它是內聯網,並且只允許使用IE,所以即使我更喜歡使用JavaScript,VBScript也可以。

編輯:讓我澄清一下:

我可以不依賴系統區域,因爲,例如,我們的很多法國客戶的使用計算機與英語語言環境,即使他們仍然使用逗號填充網頁表單中的數據。
所以我需要一種方法來執行跨多個區域「字符串到雙倍」轉換的檢查。
我知道提升條件是「什麼有3個十進制數字的數字」,但在我們的環境中,這種答案從來沒有發生過,如果它發生,它將作爲超範圍錯誤由於乘法一千,所以它不是我們真正的問題。

回答

1

在Javascript中使用parseFloat就可以得到一個數字的文字值。同樣在VBScript中使用CDbl作爲文本值。兩者都應符合爲用戶強制實施的當前區域設置。

+0

那麼,CDbl不能正常工作。例如,如果您嘗試使用錯誤的語言環境轉換「3,5」,則結果不會是3,而是35,從而無法進行比較。 – gizmo 2009-02-10 13:58:18

1

此代碼應工作:

function toFloat(localFloatStr) 
    var x = localFloatStr.split(/,|\./), 
     x2 = x[x.length-1], 
     x3 = x.join('').replace(new RegExp(x2+'$'),'.'+x2); 
    return parseFloat(x3); 
    // x2 is for clarity, could be omitted: 
    //=>x.join('').replace(new RegExp(x[x.length-1]+'$'),'.'+x[x.length-1]) 
    } 

    alert(toFloat('1,223,455.223')); //=> 1223455.223 
    alert(toFloat('1.223.455,223')); //=> 1223455.223 
    // your numbers ;~) 
    alert(toFloat('3.123,56')); //=> 3123.56 
    alert(toFloat('3,123.56')); //=> 3123.56 
0

我們做的是嘗試使用用戶的文化解析,如果不行,用一個不變的文化解析它。

雖然我不知道如何在JavaScript或VBScript中做到這一點。

-1

禁止使用任何千位分隔符。

給用戶一個例子:「Reals應該看起來像這樣:3123.563123,56」。然後簡單地將,更改爲.並解析它。

你總是可以告訴用戶他做錯了什麼,像這樣的消息:

"I don't understand what you mean by "**,**,**". 
Please format numbers like "3123.56." 
0

我用KooiInc的答案,但改變了一點,因爲它不與某些情況下估計。

function toFloat(strNum) { 
    var full = strNum.split(/[.,]/); 

    if (full.length == 1) return parseFloat(strNum); 

    var back = full[full.length - 1]; 
    var result = full.join('').replace(new RegExp(back + '$'), '.' + back); 

    return parseFloat(result); 
}