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里面的小数使用方法

  • 相关阅读:
    centos7下升级SSH
    docker: read tcp 192.168.7.235:36512->54.230.212.9:443: read: connection reset by peer.
    Rancher学习笔记----在UI界面添加主机页面无法正常显示
    Rancher3----安装部署rancher
    Rancher2-----了解什么是rancher以及简单部署
    unity坑-编译错误
    游戏UI系统设计
    使用采样器声明
    着色器数据类型和精度
    着色器编译目标等级
  • 原文地址:https://www.cnblogs.com/pk-run/p/4444582.html
Copyright © 2011-2022 走看看