[英]Round Decimal Numbers in 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
我可以知道如何實現嗎?
將數字乘以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);
number = number % 0.5 === 0 ? number : Math.round(number);
做?
我將其分解。 上面的代碼使用三元表達式為number
賦值。 (三元表達式的形式為condition ? value_if_true : value_if_false;
)
在這種情況下,條件為number % 0.5 === 0
。 這將使用余數運算符( %
)來查看數字是否可被0.5
整除。 (該剩余number / 0.5
是0
,如果數字是整除0.5
。)
因此,完整的三元可以翻譯為:
如果數字可被
0.5
整除,則取number
,否則取Math.round(number)
。 然后,將采用的值分配回number
。
console.log(Math.ceil(10.07 * 20) / 20);
當然,請記住10.04
將向下舍入為10.1
,您對此無能為力。
var number = Math.round(10.05*10)/10; //this basically does the trick
var number = number.toFixed(2);
console.log(number);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.