time:2015/04/21

1. string.format()

function GetPreciseDecimal(nNum, n)
if type(nNum) ~= "number" then
return nNum;
end n = n or ;
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的格式符一样)。所以这种方法也是有问题的,用的人请注意

举例:

. GetPreciseDecimal(0.38461538461538) =     0.4

2. 求余的方法

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

结果:

. GetPreciseDecimal(0.38461538461538) =     0.3

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

举例:

. GetPreciseDecimal(0.7) =     0.6

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

3. 求余方法(修订)

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

测试:

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

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

4. 总结:

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

lua保留n位小数方法的更多相关文章

  1. java 金额计算,商业计算 double不精确问题 BigDecimal,Double保留两位小数方法

    解决办法================== http://blog.javaxxz.com/?p=763 一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法 进行精 ...

  2. js保留两位小数方法总结

    js保留两位小数方法总结 最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求.问题是,当用户离开文本框时,我需要将用 ...

  3. python 保留两位小数方法

    原博客连接:https://blog.csdn.net/Jerry_1126/article/details/85009810 保留两位小数,并做四舍五入处理 方法一:使用字符串格式化 a = 12. ...

  4. Sql保留两位小数方法

    2.176544保留两位小数 1.select Convert(decimal(18,2),2.176544)  结果:2.18 2.select Round(2.176544,2) 结果:2.180 ...

  5. 关于js保留两位小数方法总结

    https://www.cnblogs.com/le220/p/9756881.htmlhttps://blog.csdn.net/hyb1234hi/article/details/84142721 ...

  6. php保留2位小数方法

    $num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_ ...

  7. float类型数保留一位小数

    float类型数保留一位小数 float a = 2.5f; float b = 1.2f; System.out.println(a/b); System.out.println((float)(M ...

  8. Java中四舍五入保留两位小数

    Java中四舍五入保留两位小数 方法一 四舍五入 double f = 3.15; long res = Math.round(f); #结果 res = 3 保留两位小数 double f = 3. ...

  9. java使double保留两位小数的多方法 java保留两位小数

    这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    d ...

随机推荐

  1. python 输出“Hello, world”

    目的:制作第一个项目,输出“Hello, world” 首先查看自己电脑上的python版本号,方法打开cmd输入python 如果提示:不是内部或外部命令,也不是可运行的程序或批处理文件.那么需要设 ...

  2. UFLDL 教程学习笔记(四)主成分分析

    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...

  3. 课程四(Convolutional Neural Networks),第三 周(Object detection) —— 1.Practice questions:Detection algorithms

    [解释] tree的两个bounding boxes 都要保留,因为交并比小于0.5:car 0.73保留:pedestrain 0.98保留:motorcycle 0.58保留.一共5个. [解释] ...

  4. Spring Cloud Eureka 服务注册列表显示 IP 配置问题

    服务提供者向 Eureka 注册中心注册,默认以 hostname 的形式显示,Eureka 服务页面显示的服务是机器名:端口,并不是IP+端口的形式 ,可以通过修改服务提供者配置自己的 IP 地址, ...

  5. listview监听组件内容变化

    package com.meizu.ui.gifts; import android.app.Activity; import android.content.Context; import andr ...

  6. springboot shiro开启注释

    shiroconfiguration中增加 @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceA ...

  7. nginx ngx_http_sub_module使用

    ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,比如你想把响应内容中的‘iuwai’全部替换成‘aaaaa‘,这个模块已经内置在nginx中,但是默认未安装,需要 ...

  8. MongoDB 备份与还原 mongodump、mongorestore

    目录 MongoDB 备份与还原 一. MongoDB 备份 1.mongodump 2 .cp 或者rsync 3.单节点意外关闭后,如何恢复数据 4.查看备份数据 二.MongoDB 还原 1.m ...

  9. 牛刀小试MySQL--GTID

    GTID的概念 何为GITD GTID(global transaction identifier)是全局事务标识符,在MySQL5.6版本中作为一个超级特性被推出.事务标识不仅对于Master(起源 ...

  10. 修改任务显示WrkTaskIp.aspx页面

    环境:Sharepoint2010 需求:在审批任务页面中插入或显示表单或列表内容,让内容与审核在同一页面上. 修改文件:WrkTaskIp.aspx(改前记得备份) 文件所在的路径:C:\Progr ...