Javascript中的圆形十进制数

时间:2016-10-18 02:56:34

标签: javascript

我想在javascript中实现以下圆形十进制数:

Before  | After
10.05   | 10.05  
10.04   | 10.00
10.02   | 10.00
10.07   | 10.10

当我对google和stackoverflow进行研究时,我能够做到这一点:

number = Math.round(number* 20) / 20;
number = parseFloat(number).toFixed(2);

但结果将是:

Before  | After
10.05   | 10.05  
10.04   | 10.00
10.07   | 10.05 // supposed to be 10.10 if decimal is > 0.5

我可以知道如何实现这个目标吗?

3 个答案:

答案 0 :(得分:6)

将数字乘以10并围绕:

number = Math.round(number * 10) / 10;
number.toFixed(2);

或者在一行中:

number = (Math.round(number * 10) / 10).toFixed(2);

以下代码段显示了这一点:

var numbers = [10.05, 10.04, 10.02, 10.07];

for (var i = 0; i < numbers.length; i++) {
    console.log(numbers[i] + ' -> ' + (Math.round(numbers[i] * 10) / 10).toFixed(2));
}

编辑:保留* .05可以使用if语句完成,如下所示:

number = number * 10;
number = number % 0.5 === 0 ? number : Math.round(number);
number = number / 10;
number.toFixed(2);

var numbers = [10.05, 10.04, 10.02, 10.07];

for (var i = 0; i < numbers.length; i++) {
    var number = numbers[i] * 10;
    number = number % 0.5 === 0 ? number : Math.round(number);
    number = number / 10;
    console.log(numbers[i] + ' -> ' + number.toFixed(2));
}

<强>说明

number = number % 0.5 === 0 ? number : Math.round(number);做什么?

我会把它分解。上面的代码使用ternary expressionnumber分配值。 (三元表达式的格式为condition ? value_if_true : value_if_false;。)

这种情况下的条件是number % 0.5 === 0。这会使用remainder operator (%)来查看数字是否可以被0.5整除。 (number / 0.5的剩余部分为0,如果该数字可被0.5整除。)

因此,完整的三元可以翻译为:

  

如果该号码可以0.5整除,请取number,否则取Math.round(number)。然后,将获取的值分配回number

答案 1 :(得分:1)

&#13;
&#13;
console.log(Math.ceil(10.07 * 20) / 20);
&#13;
&#13;
&#13;

当然,请记住10.04向下10.1,并且您无能为力。

答案 2 :(得分:-1)

var number = Math.round(10.05*10)/10; //this basically does the trick
var number = number.toFixed(2);
console.log(number);