我用下面的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的新手。
谢谢
答案 0 :(得分:1)
目前尚不清楚您实际上要做什么。但是,您似乎有两个问题。
此行:
function RoundUp(110, 1)
不是合法的JavaScript声明。定义函数时不能将值传递给函数。您在此处尝试执行的JavaScript 定义了一个函数,该函数包含两个名为110
和1
的参数,它们都是非法的参数名称,因此会出现语法错误
我假设您要执行的操作是
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;
}
这不适用于浮点数,但是如果您只需要处理整数就可以了。