数字取整或保留小数四舍五入的正确写法
【JS篇】
使用toFixed是错误的!请看下面例子:
(0.05).toFixed(1) //0.1 (0.15).toFixed(1) //0.1 (0.25).toFixed(1) //0.3 (0.35).toFixed(1) //0.3 (0.45).toFixed(1) //0.5 (0.55).toFixed(1) //0.6 (0.65).toFixed(1) //0.7 (0.75).toFixed(1) //0.8 (0.85).toFixed(1) //0.8 (0.95).toFixed(1) //0.9
与C#不同的是,js中的Math.round是可以正确显示四舍五入的整数的
Math.round(0.5) //1 Math.round(1.5) //2 Math.round(2.5) //3 Math.round(3.5) //4 Math.round(4.5) //5 Math.round(5.5) //6 Math.round(6.5) //7 Math.round(7.5) //8 Math.round(8.5) //9 Math.round(9.5) //10
所以在js中,正确的四舍五入应该这样写:
Math.round(0.05 * 10) / 10 //0.1 Math.round(0.15 * 10) / 10 //0.2 Math.round(0.25 * 10) / 10 //0.3 Math.round(0.35 * 10) / 10 //0.4 Math.round(0.45 * 10) / 10 //0.5 Math.round(0.55 * 10) / 10 //0.6 Math.round(0.65 * 10) / 10 //0.7 Math.round(0.75 * 10) / 10 //0.8 Math.round(0.85 * 10) / 10 //0.9 Math.round(0.95 * 10) / 10 //1
如果需要强制保留小数位数,再加上toFixed就可以了
(Math.round(0.95 * 10) / 10).toFixed(1) //1.0
为了方便使用,封装一下:
//小数四舍五入,f精度范围[0,10] Number.prototype.numberRound = function (f) {return NumberRound(this, f); } String.prototype.numberRound = function (f) {return NumberRound(this, f); } function NumberRound(n, f) {n = parseFloat(n);f = (f == "" || isNaN(f)) ? 0 : (f > 10 ? 10 : parseInt(f));var x = Math.pow(10, f);return Math.round(n * x) / x; }
所以,这样用起来就更方便了:
(0.15).numberRound(1) //0.2 "0.15".numberRound(1) //0.2 "0.15".numberRound("") //0 空,精度为0 "0.15".numberRound("abc") //0 非数字,精度为0 "0.15".numberRound(10000) //0.15 超出精度最大值,精度为10
如果非要保留位数,就再加一个toFixed就可以了
(0.095).numberRound(1).toFixed(2) //0.10
【C#篇】
相比JS,疑似C#四舍五入的方法有很多,最广泛使用的Convert.ToInt32是错误的!请看下面例子:
Convert.ToInt32(0.5) //0 Convert.ToInt32(1.5) //2 Convert.ToInt32(2.5) //2 Convert.ToInt32(3.5) //4 Convert.ToInt32(4.5) //5 Convert.ToInt32(5.5) //6 Convert.ToInt32(6.5) //6 Convert.ToInt32(7.5) //8 Convert.ToInt32(8.5) //8 Convert.ToInt32(9.5) //10
那么,我们熟悉的Math.Round呢?竟然结果和上面完全一样!也是错误的。
但是,Math.Round后面有一个可选参数(MidpointRounding.AwayFromZero),加上以后就正确了:
Math.Round(0.5,MidpointRounding.AwayFromZero) //1 Math.Round(1.5,MidpointRounding.AwayFromZero) //2 Math.Round(2.5,MidpointRounding.AwayFromZero) //3 Math.Round(3.5,MidpointRounding.AwayFromZero) //4 Math.Round(4.5,MidpointRounding.AwayFromZero) //5 Math.Round(5.5,MidpointRounding.AwayFromZero) //6 Math.Round(6.5,MidpointRounding.AwayFromZero) //7 Math.Round(7.5,MidpointRounding.AwayFromZero) //8 Math.Round(8.5,MidpointRounding.AwayFromZero) //9 Math.Round(9.5,MidpointRounding.AwayFromZero) //10
然后,再用ToString()试试:
(0.05).ToString("0.0") //0.1 (0.15).ToString("0.0") //0.2 (0.25).ToString("0.0") //0.3 (0.35).ToString("0.0") //0.4 (0.45).ToString("0.0") //0.5 (0.55).ToString("0.0") //0.6 (0.65).ToString("0.0") //0.7 (0.75).ToString("0.0") //0.8 (0.85).ToString("0.0") //0.9 (0.95).ToString("0.0") //1.0
很好,接着试ToString("#0.0")和ToString("f1")和ToString("g1"),也是一样的结果,都是正确的!
ToString("#0.0")和ToString("0.0")是一样的,但ToString("0.0")和ToString("0.#")不一样:前者保留多余的0,后者省略多余的0
f1表示精度为1位,自动补0;g1表示精度为1位,不会补0,所以在C#中,四舍五入其实很简单,直接 ToString()就可以了:
(0.65).ToString("f1") //0.7 (0.65).ToString("f3") //0.650 (0.65).ToString("g3") //0.65
转载于:https://www.cnblogs.com/kandyvip/p/7490300.html
数字取整或保留小数四舍五入的正确写法相关推荐
- python向下取整pi并保留4位小数点_Python取整及保留小数小结
1.int() 向下取整 内置函数 n = 3.75 print(int(n)) >>> 3 n = 3.25 print(int(n)) >>> 3 2.roun ...
- js取整,保留小数位数、四舍五入、科学记数法及去掉数字末尾多余的0
1.向下取整 var num1 = 12.10345; var num2 =12.9801; var newnum1=Math.floor(num1) //结果 12 var newnum2= ...
- JS小数取整以及保留小数点后两位
一.取整 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round ...
- js向上向下取整_你可能不知道的 JavaScript 中数字取整:向上取整,向下取整,四舍五入,舍去小数...
网上方法很多,标题党一下,勿拍 ^_^!实际开发过程中经常遇到数字取整问题,所以这篇文章收集了一些方法,以备查询. 常用的直接取整方法 直接取整就是舍去小数部分. 1.parseInt() parse ...
- php向上取整_PHP取整及保留两位小数的方法
PHP取整数函数常用的四种方法: intval():直接取整,舍弃小数,保留整数: round():四舍五入取整: ceil():向上取整,有小数就加1: floor():向下取整. number_f ...
- 进一法整数php,进一法取整、四舍五入取整、忽略小数等的取整数方法大全
PHP取整数函数常用的四种方法,下面收集了四个函数:经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intvalPHP取整数函数常用的 ...
- js玩转数字----取整,四舍五入,数字字符串转换
取整: 向下取整Math.floor(),向上取整Math.ceil(),四舍五入Math.round()),保留有效数位n.toFixed(),产生大于等于0小于1的随机数Math.random() ...
- js 小数向上取整,保留一位有效数字
向下取整:Math.floor() 向上取整:Math.ceil() 四舍五入:Math.round() 保留一位有效数字:num.toFixed(1)
- oracle向上取整10倍数,Oracle四舍五入,向上取整,向下取整
用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...
最新文章
- UITabBarController跳转任意界面的方法
- 构建高可用LVS + keepalived+httpd和双主模型的keepalived方案
- Stanford CS107 Programming Paradigms 编程范式
- arcgis dem栅格立体感_如何使用ArcGIS从DEM数据中提取水系
- HLSL bytecode to GLSL编译器的第一步
- AutoCAD.net: 用于ObjectARX 开发的Visual Studio 智能感知文件
- 标准燃料计算机准,油表显示的油耗真的准确吗?教你最准确的油耗计算方法
- 40vf什么意思_LED 的基本术语VF、IV、WL、IR 解释及光通量换算关系
- 酷q插件开发Java_酷Q做一个随机二次元图片插件
- VHD 多系统安装 无需分区 无需U盘 无需任何第三方工具
- 解决 ”To prevent a memory leak, the JDBC Driver has been forcibly unregistered“
- 为了讨好大舅子,程序员竟当场学起了外挂???
- 【侯捷】C++面向对象高级编程(下)
- Python安装wheel文件
- 混音师的混音之道|公开我学习混音的方法,真正的捷径|MZD Studios
- c语言中换行符的ans2码,二级C语言复习
- 运营商大数据获客的优势
- presto安装问题
- CSDN问答——测评
- 【智能零售】2018年新零售商业的四大趋势