由于項(xiàng)目需求要做 保留兩位小數(shù),并且四舍五入
這里要先說(shuō)一個(gè)坑
toFixed() 方法可把 Number 四舍五入為指定小數(shù)位數(shù)的數(shù)字。
但是其四舍五入的規(guī)則與數(shù)學(xué)中的規(guī)則不同莫秆,使用的是銀行家舍入規(guī)則,
所謂銀行家舍入法尤慰,其實(shí)質(zhì)是一種四舍六入五取偶(又稱四舍六入五留雙)法馏锡。
簡(jiǎn)單來(lái)說(shuō)就是:四舍六入五考慮,五后非零就進(jìn)一伟端,五后為零看奇偶杯道,五前為偶應(yīng)舍去,五前為奇要進(jìn)一责蝠。
而且好像不同瀏覽器也不一樣
很明顯這個(gè)會(huì)有些問(wèn)題党巾,特別是在做跟錢有關(guān)的計(jì)算時(shí),所以盡量不要用這個(gè)
下面是我項(xiàng)目中用到的方法
num是要操作的數(shù)值霜医,p是要保留幾位小數(shù)
export function keepTwoDecimalFull(num, p) {
????let result = parseFloat(num);
????if (isNaN(result)) {
????????alert('傳遞參數(shù)錯(cuò)誤齿拂,請(qǐng)檢查!');
????????return false;
????}
????let multiplicator = Math.pow(10, p);
????result = Math.round(num * multiplicator) / multiplicator;
????let s_x = result.toString();
????let pos_decimal = s_x.indexOf('.');
????if (pos_decimal < 0) {
????????pos_decimal = s_x.length;
????????s_x += '.';
????}
????while (s_x.length <= pos_decimal + p) {
????????s_x += '0';
????}
????return s_x;
}