我想在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
我可以知道如何实现这个目标吗?
答案 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 expression为number
分配值。 (三元表达式的格式为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)
console.log(Math.ceil(10.07 * 20) / 20);
&#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);