lua保留n位小数方法
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位小数方法的更多相关文章
- java 金额计算,商业计算 double不精确问题 BigDecimal,Double保留两位小数方法
解决办法================== http://blog.javaxxz.com/?p=763 一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法 进行精 ...
- js保留两位小数方法总结
js保留两位小数方法总结 最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求.问题是,当用户离开文本框时,我需要将用 ...
- python 保留两位小数方法
原博客连接:https://blog.csdn.net/Jerry_1126/article/details/85009810 保留两位小数,并做四舍五入处理 方法一:使用字符串格式化 a = 12. ...
- Sql保留两位小数方法
2.176544保留两位小数 1.select Convert(decimal(18,2),2.176544) 结果:2.18 2.select Round(2.176544,2) 结果:2.180 ...
- 关于js保留两位小数方法总结
https://www.cnblogs.com/le220/p/9756881.htmlhttps://blog.csdn.net/hyb1234hi/article/details/84142721 ...
- php保留2位小数方法
$num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_ ...
- float类型数保留一位小数
float类型数保留一位小数 float a = 2.5f; float b = 1.2f; System.out.println(a/b); System.out.println((float)(M ...
- Java中四舍五入保留两位小数
Java中四舍五入保留两位小数 方法一 四舍五入 double f = 3.15; long res = Math.round(f); #结果 res = 3 保留两位小数 double f = 3. ...
- java使double保留两位小数的多方法 java保留两位小数
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat d ...
随机推荐
- Linux学习笔记之九————ubuntu软件安装与卸载
一.更新 源 1. 寻找国内镜像源 所谓的镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的91手机助手:iOS手机上可以下载软件的AppStore 2. 备份Ubuntu默 ...
- yarn依赖管理工具,和fis3构建工具 gulp详细用法
看视频所了解到的,正在进行摸索. 参考:https://www.cnblogs.com/2050/p/4198792.html这篇介绍gulp的文章非常棒,唯一有一点,页面随时刷新的目前还没实现,不知 ...
- 面试:C++观察者模式实现
#include <list> class Subject; class Observer{ public: virtual ~Observer(){}; virtual void upd ...
- 【API知识】类型转换工具ConvertUtils引发的思考
前言 在读取Excel文件数据,有时候不可避免地需要把获取到的字符串转型为基本类型的对象.以前都是自己写转换,难度也不大.后来听说,有可以直接用的轮子——Apache 的commons-beanuti ...
- Dubbo 源码分析系列之一环境搭建
环境搭建的步骤有哪些 依赖外部的环境 使用的开发工具 源码的拉取 结构大致介绍 1 依赖的外部环境 安装JDK 安装Git 安装maven 这边我们就不介绍怎么安装这些外部环境了,大家自行从安装这些外 ...
- JVM参数以及用法
工作以后,发觉真的几乎没有像大学那样空闲的时间,坐下来看看书写写博客了.最近的一篇博客距离现在已经近一个多月了,最近也在复习Java的东西,准备校招,看了看JVM的东西,就当作记笔记. (一)JVM参 ...
- 公众号第三方平台开发 教程六 代公众号使用JS SDK说明
公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...
- R语言实战(四)—— 基本数据管理
一.基础操作 1.根据数据信息,创建数据框 > manager <- c(1,2,3,4,5) > date <- c("10/24/08","1 ...
- Python爬虫之网页图片抓取
一.引入 这段时间一直在学习Python的东西,以前就听说Python爬虫多厉害,正好现在学到这里,跟着小甲鱼的Python视频写了一个爬虫程序,能实现简单的网页图片下载. 二.代码 __author ...
- Windows安装diango框架<一>
下一篇:使用Django创建网站项目<二> python工具安装 python下载:https://www.python.org/downloads/windows/(我的版本3.7.0) ...