如何将数字保留两位小数并向下取整?

42

如何将以下输入转换为下面的输出

输入

1.0789
10.350
1.7777

输出

1.07
10.35
1.77

after=Math.floor(before*100)/100 - Ultimater
2
将“1.7777”转换为“1.77”并不是舍入,而是截断。您真正需要的是截断吗? - Álvaro González
3
这不是链接问题的复制。它特别询问舍入下取整,而链接问题涵盖了舍入四舍五入 - Adam Spiers
2个回答

89

使用Math.floor将当前值下的小数位四舍五入。

参考文档

示例

Math.floor(1.0789 * 100) / 100

工作的Fiddle

console.log(Math.floor(1.0789 * 100) / 100);
console.log(Math.floor(10.350 * 100) / 100);
console.log(Math.floor(1.7777 * 100) / 100);
console.log(Math.floor(12.34 * 100) / 100);


1
这不是一个向下取整。 - I don't know
8
这不适用于已经有两位小数的值,例如12.34将变成12.33。更好的解决方案是function floorDecimals(value, decimals) { return Number(Math.floor(value+'e'+decimals)+'e-'+decimals); }。原文出处在这里http://www.jacklmoore.com/notes/rounding-in-javascript/。 - Sean Tomlins
2
@SeanTomlins 对于我来说,在Chrome和Firefox中使用乘法/除法的简单解决方案似乎适用于向下取整和向上取整。 - vgel
@SeanTomlins Math.floor(3.29012 + 'e' + 3) TypeScript 错误 - "类型为 'string' 的参数不能赋值给类型为 'number' 的参数。" - Fiddle Freak
2
@SeanTomlins 你确定这个解决方案对值 12.34 会出问题吗?我已经在最新的 Chrome、Edge 和 IE 上测试了这个解决方案,它仍然像预期的那样工作。 - Nitheesh
显示剩余7条评论

1

你有几种方法可以实现这个功能

  1. 使用 Math.round(num * 100) / 100
  2. 使用 Math.ceil(num * 100)/100;

4
你提出的3种方法是将小数四舍五入为更大的整数。但问题是如何将它们向下取整。 - zed
1
toFixed 将它们四舍五入到小数点后的位数。 - Albert
5
toFixed函数会对5及以上的小数进行四舍五入,只有在小于等于4时才会向下取整。 - JChao
1
toFixed 返回一个字符串。 - Matyanson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接