【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

数字取整或保留小数四舍五入的正确写法相关推荐

  1. python向下取整pi并保留4位小数点_Python取整及保留小数小结

    1.int() 向下取整 内置函数 n = 3.75 print(int(n)) >>> 3 n = 3.25 print(int(n)) >>> 3 2.roun ...

  2. js取整,保留小数位数、四舍五入、科学记数法及去掉数字末尾多余的0

    1.向下取整 var num1 = 12.10345; var num2 =12.9801; var newnum1=Math.floor(num1)     //结果 12 var newnum2= ...

  3. JS小数取整以及保留小数点后两位

    一.取整 1.丢弃小数部分,保留整数部分  js:parseInt(7/2) 2.向上取整,有小数就整数部分加1  js: Math.ceil(7/2) 3,四舍五入.  js: Math.round ...

  4. js向上向下取整_你可能不知道的 JavaScript 中数字取整:向上取整,向下取整,四舍五入,舍去小数...

    网上方法很多,标题党一下,勿拍 ^_^!实际开发过程中经常遇到数字取整问题,所以这篇文章收集了一些方法,以备查询. 常用的直接取整方法 直接取整就是舍去小数部分. 1.parseInt() parse ...

  5. php向上取整_PHP取整及保留两位小数的方法

    PHP取整数函数常用的四种方法: intval():直接取整,舍弃小数,保留整数: round():四舍五入取整: ceil():向上取整,有小数就加1: floor():向下取整. number_f ...

  6. 进一法整数php,进一法取整、四舍五入取整、忽略小数等的取整数方法大全

    PHP取整数函数常用的四种方法,下面收集了四个函数:经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intvalPHP取整数函数常用的 ...

  7. js玩转数字----取整,四舍五入,数字字符串转换

    取整: 向下取整Math.floor(),向上取整Math.ceil(),四舍五入Math.round()),保留有效数位n.toFixed(),产生大于等于0小于1的随机数Math.random() ...

  8. js 小数向上取整,保留一位有效数字

    向下取整:Math.floor() 向上取整:Math.ceil() 四舍五入:Math.round() 保留一位有效数字:num.toFixed(1)

  9. oracle向上取整10倍数,Oracle四舍五入,向上取整,向下取整

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

最新文章

  1. UITabBarController跳转任意界面的方法
  2. 构建高可用LVS + keepalived+httpd和双主模型的keepalived方案
  3. Stanford CS107 Programming Paradigms 编程范式
  4. arcgis dem栅格立体感_如何使用ArcGIS从DEM数据中提取水系
  5. HLSL bytecode to GLSL编译器的第一步
  6. AutoCAD.net: 用于ObjectARX 开发的Visual Studio 智能感知文件
  7. 标准燃料计算机准,油表显示的油耗真的准确吗?教你最准确的油耗计算方法
  8. 40vf什么意思_LED 的基本术语VF、IV、WL、IR 解释及光通量换算关系
  9. 酷q插件开发Java_酷Q做一个随机二次元图片插件
  10. VHD 多系统安装 无需分区 无需U盘 无需任何第三方工具
  11. 解决 ”To prevent a memory leak, the JDBC Driver has been forcibly unregistered“
  12. 为了讨好大舅子,程序员竟当场学起了外挂???
  13. 【侯捷】C++面向对象高级编程(下)
  14. Python安装wheel文件
  15. 混音师的混音之道|公开我学习混音的方法,真正的捷径|MZD Studios
  16. c语言中换行符的ans2码,二级C语言复习
  17. 运营商大数据获客的优势
  18. presto安装问题
  19. CSDN问答——测评
  20. 【智能零售】2018年新零售商业的四大趋势

热门文章

  1. IT新人如何快速成长
  2. php修改新闻分类代码,完整的新闻无限级分类代码,可添加,删除,移动,修改
  3. php数字加零,php实现数字补零的两种方法
  4. 算法-电话号码的字母组合
  5. muduo之Thread
  6. NAND Flash和NOR Flash的区别
  7. 常考数据结构与算法:子数组中的最大累加和问题
  8. 操作系统:多处理器编程-- 蒋炎岩老师
  9. 线程:方法join的使用
  10. 前端一HTML:十九继承的特殊性