目录
5.Number.prototype.toFixed()--“toFixed的四舍六入五成双”
6.Number.prototype.toPrecision()
【mdn中关于Math.trunc()的描述】:
不像 Math
的其他三个方法: Math.floor()、Math.ceil()、Math.round() ,Math.trunc()
的执行逻辑很简单,仅仅是删除掉数字的小数部分和小数点,不管参数是正数还是负数。
传入该方法的参数会被隐式转换成数字类型。
链接:Math.trunc() - JavaScript | MDN
【场景】
js涉及小数的运算出现失去精度的结果
【常用的其他函数以及其效果】
1.Math.round()
Math.round
() 函数返回一个数字四舍五入后最接近的整数。
·重点:四舍五入、以及在负数时的表现(特殊值-0.5)
x = Math.round(20.49); //20 (只判断0.4的这个十分位)
x = Math.round(-20.49); //-20 (倘若是正数20.49,则舍入为20;因此-20.49舍入为-20,其计算原理是先取绝对值算四舍五入,最后加正负号)
x = Math.round(-20.5); //-20 (特殊情况-0.5,此时是正方向舍入的入)
x = Math.round(-20.51); //-21 (普通情况,-0.51,取绝对值。因为20.51舍入为21,所以-20.51舍入为-21)
2.Math.ceil()
Math.ceil() 返回一个大于或等于给定数字的最小整数【即,向上取整】
console.log(Math.ceil(.0001)); // 1 ,正小数的话,如果整数位是0结果恒为1
console.log(Math.ceil(7.004)); // 8 ,大于1的正小数,则是一致的“进一”操作
console.log(Math.ceil(-0.9)); // 0
console.log(Math.ceil(-1.1)); // -1
console.log(Math.ceil(-2)); // -2 ,这三例负小数,是只计算正方向上的数值最接近的整数
3.Math.floor()
Math.floor() 返回小于或等于一个给定数字的最大整数【即,向下取整】
笔者的总结:正小数是去尾,负小数是“绝对值进一”
4.Math.trunc()
Math.trunc() 方法会“将参数隐式转换成数字类型后,纯粹的去除小数部分”
Math.trunc(.0001) // 0
Math.trunc(-0.123) // -0
Math.trunc("-1.123") // -1
Math.trunc(NaN) // NaN
Math.trunc("foo") // NaN
Math.trunc() // NaN
Math.trunc("") // 0 (这个要特别注意)
5.Number.prototype.toFixed()--“toFixed一定条件下的四舍六入五成双”
2024/6/24备注:此处的描述在一些场景下并不正确,可以参考别的高人的帖子进一步了了解JS 四舍五入方法 和 toFixed()最全总结(包括toFixed()的坑以及四舍五入实现方法)-CSDN博客
-------------------------------------------------------------------------------------------
使用定点表示法表示给定数字的字符串。
注意:返回值是一个字符串
numObj.toFixed(digits)
[digits] 小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。
2.34.toFixed(1); // 返回 "2.3", digits的值是1,保留一位小数
-2.34.toFixed(1); // 返回 -2.3 (由于操作符优先级,负数不会返回字符串)
(-2.34).toFixed(1); // 返回 "-2.3" (若用括号提高优先级,则返回字符串)
2.34.toFixed(6); // 返回 "2.340000", 用0填充。(此举可用于一些补零操作;比如整数临时化小数用toFixed补零,然后移除小数点)
//toFixed的四舍六入五成双
//——【四舍六入】
console.log(5.34.toFixed(1)); // 返回"5.3",保留1位小数,百分位<=4,直接去尾
console.log(5.36.toFixed(1)); // 返回"5.4",保留1位小数,百分位>=6,直接进一
//——【五成双】,以上面toFixed(1)为例,百分位是5的时候,需要特殊讨论:
console.log(5.351.toFixed(1)); // 返回"5.4",0.05后面有数字,直接进一
/*
if
0.05后面没有数字 && 0.05前面是0、8,直接去尾
*/
console.log(5.05.toFixed(1)); // "5.0"
console.log(5.85.toFixed(1)); // "5.8"
/*
if
0.05后面没有数字 && 0.05前面是奇数或者2、4、6,直接进一
*/
console.log(5.15.toFixed(1)); // "5.2"
console.log(5.35.toFixed(1)); // "5.3"
console.log(5.55.toFixed(1)); // "5.5"
console.log(5.75.toFixed(1)); // "5.8"
console.log(5.95.toFixed(1)); // "6.0"
console.log(5.25.toFixed(1)); // "5.3"
console.log(5.45.toFixed(1)); // "5.5"
console.log(5.65.toFixed(1)); // "5.7"
6.Number.prototype.toPrecision()
toPrecision() 方法以指定的精度返回该数值对象的字符串表示。
(简单来说,toPrecision()和toFixed()都是四舍六入五成双,区别就是,toPrecision()的传参是包含整数位在内的所有位数,超出的部分补零)
//参数为空时,等同toString()
console.log(5.15.toPrecision()); // "5.15"
//参数的位数超出时,小数补零
console.log(5.15.toPrecision(4)); // "5.150"
console.log((5).toPrecision(4)); // "5.000",如果仅提供证整数,则该整数需要加括号
// 精确到十分位 && 百分位是5 && 十分位是奇数或者2、4、6
console.log(5.15.toPrecision(2)); // "5.2"
console.log(5.35.toPrecision(2)); // "5.3"
console.log(5.55.toPrecision(2)); // "5.5"
console.log(5.75.toPrecision(2)); // "5.8"
console.log(5.95.toPrecision(2)); // "6.0"
console.log(5.25.toPrecision(2)); // "5.3"
console.log(5.45.toPrecision(2)); // "5.5"
console.log(5.65.toPrecision(2)); // "5.7"
// 精确到十分位 && 百分位是5 && 十分位是0、8
console.log(5.05.toPrecision(2)); // "5.0"
console.log(5.85.toPrecision(2)); // "5.8"