zoukankan      html  css  js  c++  java
  • lua保留n位小数方法

    time:2015/04/21

    1. string.format()

    function GetPreciseDecimal(nNum, n)
        if type(nNum) ~= "number" then
            return nNum;
        end
        
        n = n or 0;
        n = math.floor(n)
        local fmt = '%.' .. n .. 'f'
        local nRet = tonumber(string.format(fmt, nNum))
    
        return nRet;
    end

    后记:2015/06/25

    问题:string.format("%.xf", nNum)会对nNum进行四舍五入(同C语言中的printf的格式符一样)。所以这种方法也是有问题的,用的人请注意

    举例:

    1. GetPreciseDecimal(0.38461538461538) =     0.4

    2. 求余的方法

    function GetPreciseDecimal(nNum, n)
        if type(nNum) ~= "number" then
            return nNum;
        end
        n = n or 0;
        n = math.floor(n)
        if n < 0 then
            n = 0;
        end
        local nDecimal = 1/(10 ^ n)
        if nDecimal == 1 then
            nDecimal = nNum;
        end
        local nLeft = nNum % nDecimal;
        return nNum - nLeft;
    end

    结果:

    2. GetPreciseDecimal(0.38461538461538) =     0.3

    问题:在lua下面,存在0.7 % 0.1 = 0.1的情况,所以上面写法错误

    举例:

    2. GetPreciseDecimal(0.7) =     0.6

    解决:见3.修订,不使用求余方法

    3. 求余方法(修订)

    function GetPreciseDecimal(nNum, n)
        if type(nNum) ~= "number" then
            return nNum;
        end
        n = n or 0;
        n = math.floor(n)
        if n < 0 then
            n = 0;
        end
        local nDecimal = 10 ^ n
        local nTemp = math.floor(nNum * nDecimal);
        local nRet = nTemp / nDecimal;
        return nRet;
    end

    测试:

    3. GetPreciseDecimal(0.38461538461538) =     0.7
    3. GetPreciseDecimal(0.7) =     0.7

    待测:不知道还有没有其他问题

    4. 总结:

    (1)小心lua里面的小数使用方法

  • 相关阅读:
    Windows OS上安装运行Apache Kafka教程
    CSS3 transition属性
    CSS3新增UI样式
    css3响应式布局
    CSS3弹性盒模型
    CSS3
    移动端开发的那点事儿
    git开源项目协作
    移动端(IOS)iframe监听不到 onscroll 事件
    Javascript高级程序设计读书笔记(第10章 DOM)
  • 原文地址:https://www.cnblogs.com/pk-run/p/4444582.html
Copyright © 2011-2022 走看看