JavaScript对于相同的参数值返回不同的输出

时间:2019-02-14 21:27:47

标签: javascript

我用下面的JavaScript代码舍入值,在类似情况下返回不同的结果。这是通过工具调用的。

var precision = -1;
        		
        	
        /**
         * Initialization
         */
            function _init() 
            {
        	precision = 8;
            }

case1
            function RoundUp(number, num_digits)
            {
            	var shift = Math.pow(10, num_digits);
            	var rounded = Math.ceil(number * shift) / shift;
                rounded = (precision>-1) ? Number(rounded.toFixed(precision)) : rounded;
                return rounded;
            }
            
case2                
            function RoundUp(110, 1)
            {
            	var shift = Math.pow(10, num_digits);
            	var rounded = Math.ceil(number * shift) / shift;
                rounded = (precision>-1) ? Number(rounded.toFixed(precision)) : rounded;
                return rounded;
            }

如果我们直接传递某些参数值,例如ex(110,1),则返回110。(CASE2)但是,当我们通过某个变量(CASE1)间接传递相同的参数值时,由于某种原因,输出将变为111。

这里,数字= 110,数字位数= 1

我不知道为什么会这样。有人可以帮忙吗?请原谅,但我是JavaScript的新手。

谢谢

1 个答案:

答案 0 :(得分:1)

目前尚不清楚您实际上要做什么。但是,您似乎有两个问题。

1。语法错误

此行:

function RoundUp(110, 1)

不是合法的JavaScript声明。定义函数时不能将值传递给函数。您在此处尝试执行的JavaScript 定义了一个函数,该函数包含两个名为1101的参数,它们都是非法的参数名称,因此会出现语法错误

2。数学

我假设您要执行的操作是

roundUp(12345, 1)  =>  20000
roundUp(12345, 2)  =>  13000
roundUp(12345, 3)  =>  12400
roundUp(12345, 4)  =>  12350  etc

如果正确,那么您的数学是错误的。尝试以下方法:

function roundUp(number, numDigits) {
  var shift = Math.pow(10, number.toString().length - numDigits);
  var rounded = Math.ceil(number / shift) * shift;
  rounded = (precision>-1) ? Number(rounded.toFixed(precision)) : rounded;
  return rounded;
}

这不适用于浮点数,但是如果您只需要处理整数就可以了。