PALMisLIFE 討論區

標題: [求助] JavaScript數字計算 [列印本頁]

作者: johnnyk    時間: 2005-12-23 16:37
標題: [求助] JavaScript數字計算
開一個空白HTML
在JavaScript裡只寫一行:document.write (4.1*100) ;

畫面上出現的是409.99999999999994


原本的需求
限輸入0.01~15.00之數值
欄位maxlength=5

當使用者輸入小數三位時,如 4.123
則先乘100,取整數,再除100

而問題發生在乘100時!
作者: sgon    時間: 2005-12-23 18:57
標題: Re: [求助] JavaScript數字計算
實用的Javascript 的位數轉換範例.

-----------------------------------------------------------------------------------

var NDIGITS = 16;
var entered = true;
function format(value){
        var valStr = "" + value;
        if (valStr.indexOf("N") >= 0 ||
                (value == 2*value && value == 1+value))
                return "Error ";
        var i = valStr.indexOf("e")
        if (i >= 0) {
                var expStr = valStr.substring(i+1, valStr.length);
                if (i > 11) i = 11;
                valStr = valStr.substring(0, i);
                if (valStr.indexOf(".") < 0) valStr += ".";
                valStr += " " + expStr;
        }
        else {
                var valNeg = false;
                if (value < 0) {
                        value = -value;
                        valNeg = true;
                }
                var valInt = Math.floor(value);
                var valFrac = value - valInt;
                var prec = NDIGITS - (""+valInt).length - 1;
                if (! entered && fixed>0)
                                prec = fixed;
                var mult = " 1000000000000000000".substring(1, prec+2);
                var frac = Math.floor(valFrac * mult + 0.5);
                valInt = Math.floor(Math.floor(value * mult + .5) / mult);
                if (valNeg)
                        valStr = "-" + valInt;
                else
                valStr = "" + valInt;
                var fracStr = "00000000000000" + frac;
                fracStr = fracStr.substring(fracStr.length-prec, fracStr.length);
                i = fracStr.length - 1;
                if (entered || fixed==0) {
                        while (i >= 0 && fracStr.charAt(i) == "0")
                                --i;
                        fracStr = fracStr.substring(0, i+1);
                }
                if (i >= 0) valStr += "." + fracStr;
        }
        return valStr;
}
document.write(format(4.1*100));

[ Last edited by sgon on 2005-12-23 at 19:00 ]
作者: johnnyk    時間: 2005-12-25 21:51
標題: Re: [求助] JavaScript數字計算
感謝您提供的範例,相當實用呢^^!
作者: magiclion    時間: 2005-12-27 10:30
標題: Re: [求助] JavaScript數字計算
 
這是 IEEE 754 標準的問題,JavaScript 做小數點運算常會出錯,因此盡量不要使用 JS 做浮點運算。

如果是要將小數點乘以 100 轉成整數再做運算,我是直接使用 Math.round() 方法。

例如: Math.round( 4.1*100 );
作者: johnnyk    時間: 2005-12-27 11:02
標題: Re: [求助] JavaScript數字計算
Originally posted by magiclion at 2005-12-27 10:30:
 
這是 IEEE 754 標準的問題,JavaScript 做小數點運算常會出錯,因此盡量不要使用 JS 做浮點運算。

如果是要將小數點乘以 100 轉成整數再做運算,我是直接使用 Math.round() 方法。

例如: Math.round( 4.1*100 );



感謝您的解答,終於解開我心中長久的困惑!




歡迎光臨 PALMisLIFE 討論區 (http://f.pil.tw/) Powered by Discuz! X2.5