JavaScript:在不影响结果准确性的情况下舍入数字
JavaScript: Rounding number without impacting result accuracy
>问题:如果你这样做log1000
你会得到的结果是log1000 = 2.9999999999999996
而不是3。
我试图在不影响结果准确性的情况下删除 JavaScript eval()
函数中的舍入误差。在格式编号函数中FormatNumber(strnum)
我放了CheckEpsilon(strnum)
来测试数字的"右尾"是否大于 epsilon(假设 epsilon 的值是 1e-9,如 C 中)
function FormatNumber(strnum) {
// asf - number format: automatic(0), scientific(1) or fixed(2) notation
// decimal - number of decimal places(0-15)
// First we must check if the right tail is bigger than epsilon
strnum = CheckEpsilon(strnum);
// And then we format the number
var x = parseFloat(strnum);
switch(asf) {
case 0: // auto
strnum = x.toPrecision();
break;
case 1: // sci
strnum = x.toExponential(decimal);
break;
case 2: // fix
strnum = x.toFixed(decimal);
break;
}
return strnum;
}
function CheckEpsilon(strnum) {
// EPSILON - Difference between 1 and the least value greater than 1 that is representable.
var epsilon = 1e-8;
var x = parseFloat(strnum);
var expnum = x.toExponential(17);
// Last 10 numbers before the exponent (9 if the number is negative)
// we turn in to a new decimal number ...
var y = parseFloat("0." + expnum.slice(9,19));
// and then we compare it to epsilon (1e-8)
// If y (or 1-y) is smaller than epsilon we round strnum
if (y<epsilon || (1-y)<epsilon) {
strnum = x.toExponential(10);
}
//and if it isn't, strnum is returned as normal
return strnum;
}
如果你对函数的实际展示感兴趣,你可以看看我做的计算器(它是用javascript制作的,所以你可以很容易地检查代码)。链接是:http://www.periodni.com/calculator.html。
这就是我的做法,但我的实际问题是:有谁知道更好的方法吗?
只需使用toFixed(2)
,例如:
var rounded = originalvar.toFixed(2);
相关文章:
- 如何在不丢失格式的情况下连续淡入() 元素文本的每个字符,包括嵌套元素
- 如何在不使用滚动条的情况下将html页面放入弹出窗口(对话框)
- 在这种情况下,我如何在jquery中将字符串放入php中
- 如何在不向上舍入的情况下删除尾随小数
- 将浮点数向上舍入到 javascript 中的下一个整数
- 简单的淡入和淡出效果在没有框架的情况下点击
- JavaScript:在 .5 种情况下向下舍入
- 在 JavaScript 中向下舍入一个数字
- 是否可以在没有JS的情况下将数据放入操作中
- 如何处理下拉列表的十进制值而不舍入或修剪零
- 向上/向下舍入公式的元素,直到结果为整数
- 向下舍入小数 JavaScript
- Javascript:向上和向下舍入到最接近的 5,然后找到一个公分母
- JavaScript:在不影响结果准确性的情况下舍入数字
- Javascript:向上舍入到5的下一个倍数
- 大的 JavaScript ints 不会在没有舍入的情况下转换为 String
- 如何在内容不同时淡入的情况下淡入到新背景
- 向上舍入/向下舍入一个时刻js 时刻到最接近的分钟
- 画布外导航:如何在不覆盖正文的情况下,在一级菜单的顶部滑入二级菜单
- 如何在不放入数据的情况下返回Vue资源