四舍五入到万位,有没什么函数实现?
javascript吧
全部回复
仅看楼主
level 8
比如一个数值: 52645
能否通过函数取出值为:50000
或有没更好的办法来做?
2023年09月06日 03点09分 1
level 8
数值可能是5位,也可能是6位,,比如
56566 转为 50000
565656 转为 500000
5544444 转为 5000000
2023年09月06日 03点09分 2
5544444变5000000也叫取出万位吗?[汗]
2023年09月07日 11点09分
@宇春一路公交车 不要跟标题计较,哈哈,就是想四舍五入到最大位。
2023年09月07日 12点09分
level 13
您管这叫“四舍五入”?“最高位向下取整”还差不多。
js 内置的函数可不管你这种细致的需求,肯定得自己写。
不想用 if,行,有数学的方法,上面那货说的字符串也算一种。
先说字符串的,因为这种方法最简单:
缺点是,不支持负数和小数,我猜你也不需要。当然要支持也可以,但你也不想写 if,对吧?
然后是数学的,这个只支持14位数,但也只比上边那个方法少了一位而已,想要支持无穷无尽的位数,你得上 BigInt,然后这个方法就不能用了。
缺点是,不接受 0。当然要支持也可以,但你也不想写 if,对吧?
第一个的优缺点:
改造一下可以支持负数和小数,如果用 BigInt 可以支持超大数,但只能支持整数
速度较慢,14万次参考用时 26±3 ms
不支持超过 15 位数
第二个的优缺点:
改造一下可以接受 0,天生支持小数和负数,速度较快,14万次参考用时 12±2 ms
不支持超过 14 位数
如果你真的一个 if 都不想写,那这两种方法都有问题,就看你需求有多宽。
可有什么用呢?不过是内置函数替你承担了 if 而已。
2023年09月07日 17点09分 4
[大拇指]绝顶到家啊!厉害至极!
2023年09月08日 00点09分
level 8
const num = 12345;
+(Math.abs(num)+'')[0].padEnd((Math.abs(num)+'').length, '0');
+((Math.abs(num)+'')[0]) *(Math.pow(10, (Math.abs(num)+'').length -1));
+(Math.abs(num)+'')[0] * Math.pow(10, Math.floor(Math.log10(Math.abs(num))));
parseInt((Math.abs(num)+'')[0] + '0'.repeat((Math.abs(num)+'').length - 1), 10);
2023年09月15日 10点09分 5
level 1
function roundDownHighest(value) {
if (value === 0) {
return 0;
}
const sign = Math.sign(value);
const absValue = Math.abs(value);
const magnitude = Math.pow(10, Math.floor(Math.log10(absValue)));
return sign * Math.floor(absValue / magnitude) * magnitude;
}
2023年09月18日 09点09分 7
1