获取 2 位浮点数未按预期工作
Getting 2 digits floating number isn't working as expected
>我有这个数字:-0.0166667,我只想得到两个浮点数,所以数字应该是-0.01
我试过这个
-0.0166667.toFixed(2) # gives : -0.02
还有这个
Math.round(-0.0166667 * 100) / 100 # also gives : -0.02
但是他们都将数字转换为-0.02而不是-0.01
这是怎么回事?
按位|
或截断分数部分。
var x = (-0.0166667 * 100 | 0) / 100,
y = (0.0166667 * 100 | 0) / 100;
document.write(x + '<br>' + y);
一个更好的解决方案,可以保存标志,应用地板并将标志放回原处。
function toFixed(x, digits) {
return (x < 0 ? - 1 : 1) * Math.floor(Math.abs(x) * Math.pow(10, digits)) / Math.pow(10, digits);
}
document.write(toFixed(-0.0166667, 2) + '<br>');
document.write(toFixed(0.0166667, 2) + '<br>');
document.write(toFixed(-0.0166667, 3) + '<br>');
document.write(toFixed(0.0166667, 3) + '<br>');
Math.round
会将数字四舍五入到最接近的整数,因此代码的输出实际上是正确的。您需要的是截断而不是舍入。这是最简单的方法:
function toZero(x) {
return x > 0 ? Math.floor(x) : Math.ceil(x);
}
function round2digits(x) {
return toZero(x * 100) / 100;
}
document.write(round2digits(-0.0166)); // prints `-0.01`
对于小于零之间的数字,Math.ceil
截断而不舍入,对于大于零的数字Math.floor
工作正常。由于您的数字小于 zer,因此请使用Math.ceil
Math.ceil(-0.0166667 * 100) / 100
编辑
编写自定义帮助程序方法来截断浮点
function truncate(num) {
return num > 0 ? Math.floor(num) : Math.ceil(num);
}
并将数字四舍五入 2 位数字使用
truncate(num * 100) / 100
相关文章:
- 将浮点数排序为自然数
- 使用javascript从字符串中提取浮点数
- 为大型地理位置的坐标生成浮点数
- 如何使用Javascript使浮点数的精度相同
- 从字符串到浮点数的奇怪转换
- 如何将浮点数格式化为两位数
- 浮点数的总和在 JavaScript 中没有给出小数
- 如何使用 javascript 将浮点数格式化为十进制数(7)
- HTML浮点数字字段具有高精度,但呈现四舍五入值
- 使用浮点数获取基于数组的y轴最大/最小值
- 只允许带有退格和左右箭头的浮点数
- javascript正则表达式浮点数,以字符串结尾
- 在AngularJS中格式化浮点数而不丢失精度
- 如何通过 javascript 在浮点数中保留小数点数后的 2 位数字
- 在Javascript中,大浮点数的小数位数有限制吗
- 正则表达式用于逗号分隔浮点数的列表
- 谷歌条形图无法显示浮点数
- 如何在Javascript中将浮点数转换为字符串数组
- 获取 2 位浮点数未按预期工作
- 如何在javascript中将分数转换为浮点数