Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:不影响结果准确性的舍入数_Javascript_Numbers_Eval_Rounding_Floating Accuracy - Fatal编程技术网

JavaScript:不影响结果准确性的舍入数

JavaScript:不影响结果准确性的舍入数,javascript,numbers,eval,rounding,floating-accuracy,Javascript,Numbers,Eval,Rounding,Floating Accuracy,问题:如果执行log1000操作,您将得到的结果是log1000=2.999999999999 6而不是3 我试图在JavaScripteval()函数中消除这个舍入错误,而不影响结果的准确性。 在格式编号函数FormatNumber(strnum)I中放入CheckEpsilon(strnum),测试数字的“右尾”是否大于epsilon(假设epsilon的值为1e-9,如C中所示) 函数格式编号(strnum){ //asf-数字格式:自动(0)、科学(1)或固定(2)表示法 //小数-小数

问题:如果执行
log1000
操作,您将得到的结果是
log1000=2.999999999999 6
而不是3

我试图在JavaScript
eval()
函数中消除这个舍入错误,而不影响结果的准确性。 在格式编号函数
FormatNumber(strnum)
I中放入
CheckEpsilon(strnum)
,测试数字的“右尾”是否大于epsilon(假设epsilon的值为1e-9,如C中所示)

函数格式编号(strnum){
//asf-数字格式:自动(0)、科学(1)或固定(2)表示法
//小数-小数位数(0-15)
//首先我们必须检查右尾是否比ε大
strnum=CheckEpsilon(strnum);
//然后我们格式化数字
var x=解析浮点(strnum);
交换机(asf){
案例0://自动
strnum=x.toPrecision();
打破
案例1://sci
strnum=x.toExponential(十进制);
打破
案例2://修复
strnum=x.toFixed(十进制);
打破
}
返回strnum;
}
函数校验ε(strnum){
//ε-1与可表示的大于1的最小值之间的差值。
varε=1e-8;
var x=解析浮点(strnum);
var expnum=x.toExponential(17);
//指数前的最后10个数字(如果数字为负数,则为9)
//我们换一个新的十进制数。。。
变量y=parseFloat(“0.”+expnum.slice(9,19));
//然后我们将其与ε(1e-8)进行比较
//如果y(或1-y)小于ε,我们就把strnum取整
如果(y只需使用
toFixed(2)
如:

var rounded = originalvar.toFixed(2);
“我试图在不影响结果准确性的情况下消除JavaScript eval()函数中的舍入错误。”
eval
与此无关,只是IEEE-754双精度浮点数不能完美地表示每个值。
var rounded = originalvar.toFixed(2);