PALMisLIFE 討論區

搜索
鹹魚爸魅力四射舞蹈教室
查看: 5413|回復: 4
打印 上一主題 下一主題

[求助] JavaScript數字計算

[複製鏈接]

293

主題

0

好友

2300

積分

Johnny Joker

  • TA的每日心情
    無聊
    2012-7-5 13:24
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    文章
    1910
    跳轉到指定樓層
    1#
    發表於 2005-12-23 16:37 |只看該作者 |倒序瀏覽
    開一個空白HTML
    在JavaScript裡只寫一行:document.write (4.1*100) ;

    畫面上出現的是409.99999999999994


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

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

    而問題發生在乘100時!
    分享淘帖0 分享分享0 收藏收藏0 頂0 踩0

    40

    主題

    2

    好友

    278

    積分

  • TA的每日心情

    2011-7-27 14:39
  • 簽到天數: 4 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    文章
    435
    2#
    發表於 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 ]
    回復

    使用道具 舉報

    293

    主題

    0

    好友

    2300

    積分

    Johnny Joker

  • TA的每日心情
    無聊
    2012-7-5 13:24
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    文章
    1910
    3#
    發表於 2005-12-25 21:51 |只看該作者

    Re: [求助] JavaScript數字計算

    感謝您提供的範例,相當實用呢^^!
    回復

    使用道具 舉報

    3

    主題

    0

    好友

    69

    積分

    該用戶從未簽到

    文章
    34
    4#
    發表於 2005-12-27 10:30 |只看該作者

    Re: [求助] JavaScript數字計算

     
    這是 IEEE 754 標準的問題,JavaScript 做小數點運算常會出錯,因此盡量不要使用 JS 做浮點運算。

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

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

    使用道具 舉報

    293

    主題

    0

    好友

    2300

    積分

    Johnny Joker

  • TA的每日心情
    無聊
    2012-7-5 13:24
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    文章
    1910
    5#
    發表於 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 掌上生活      下載:更快、更棒、更好玩

    GMT+8, 2024-9-28 01:26 , Processed in 0.047043 second(s), 31 queries , Gzip On.

    Powered by Discuz!

    © 2001-2012 Comsenz Inc. style by eisdl

    回頂部