成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

js 常用計(jì)算

zhaofeihao / 1447人閱讀

摘要:常用計(jì)算由于存在計(jì)算精度的問(wèn)題,例如,所以需要整理以下方法,方便進(jìn)行簡(jiǎn)單計(jì)算。主要思路是先轉(zhuǎn)成整數(shù),然后再進(jìn)行計(jì)算,計(jì)算完再轉(zhuǎn)回浮點(diǎn)數(shù)獲取小數(shù)位以及向右移動(dòng)小數(shù)位,是計(jì)算時(shí)轉(zhuǎn)換成整數(shù)的工具函數(shù)。

js 常用計(jì)算

由于存在計(jì)算精度的問(wèn)題,例如 0.1+0.2 = 0.30000000000000004,所以需要整理以下方法,方便進(jìn)行簡(jiǎn)單計(jì)算。

主要思路是先轉(zhuǎn)成整數(shù),然后再進(jìn)行計(jì)算,計(jì)算完再轉(zhuǎn)回浮點(diǎn)數(shù)

獲取小數(shù)位以及向右移動(dòng)小數(shù)位,是計(jì)算時(shí)轉(zhuǎn)換成整數(shù)的工具函數(shù)。加減乘除四個(gè)函數(shù)都用到了
獲取小數(shù)位
// 獲取小數(shù)位
export function getDecimalPlace(num) {
    try {
        let result = num.toString().split(".")[1].length;
        return result;
    } catch (e) {
        return 0;
    }
}
向右移動(dòng)小數(shù)位
/**
 * 向右移動(dòng)小數(shù)點(diǎn)
 * @param movePlace 移動(dòng)步數(shù),正向右,負(fù)數(shù)向左
 */
export function moveDecimalPlace(num, movePlace) {
    let decimalPlace = getDecimalPlace(num);
    let step = movePlace - decimalPlace;

    // 先轉(zhuǎn)成整數(shù)類(lèi)型,再確定需要如何移動(dòng),為了處理 268.34*100 卻等于 26833.999999999996 的問(wèn)題
    let intNum = Number(num.toString().replace(".", ""));
    if (step > 0) {
        return intNum * Math.pow(10, step);
    } else if (step < 0) {
        return intNum / Math.pow(10, -step);
    } else {
        return intNum;
    }
}
這里右移動(dòng)小數(shù)點(diǎn)需要先轉(zhuǎn)成整形,再進(jìn)一步處理是因?yàn)榇嬖谝恍└↑c(diǎn)數(shù)乘以 10 的倍數(shù)也會(huì)出問(wèn)題!
例如: 268.34*100 => 26833.999999999996
加法
/**
 * 相加  arg1 + arg2
 */
export function add(arg1, arg2) {
    let step1 = getDecimalPlace(arg1);
    let step2 = getDecimalPlace(arg2);

    let maxStep = Math.max(step1, step2);

    arg1 = moveDecimalPlace(arg1, maxStep);
    arg2 = moveDecimalPlace(arg2, maxStep);

    return (arg1 + arg2) / Math.pow(10, maxStep);
}
減法
/**
 * 相減   arg1 - arg2
 */
export function sub(arg1, arg2) {
    return add(arg1, -arg2);
}
乘法
/**
 * 乘法   arg1 * arg2
 */
export function multiply(arg1, arg2) {
    let step1 = getDecimalPlace(arg1);
    let step2 = getDecimalPlace(arg2);

    let maxStep = Math.max(step1, step2);

    arg1 = moveDecimalPlace(arg1, maxStep);
    arg2 = moveDecimalPlace(arg2, maxStep);

    if (maxStep > 0) {
        let stepPow = Math.pow(10, maxStep);
        return (arg1 * arg2) / (stepPow * stepPow);
    }
    return arg1 * arg2;
}
除法
/**
 * 除法   arg1 / arg2
 */
export function division(arg1, arg2) {
    let step1 = getDecimalPlace(arg1);
    let step2 = getDecimalPlace(arg2);

    let maxStep = Math.max(step1, step2);

    arg1 = moveDecimalPlace(arg1, maxStep);
    arg2 = moveDecimalPlace(arg2, maxStep);

    return arg1 / arg2;
}
其他

源碼鏈接

更多代碼片段

個(gè)人博客鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100253.html

相關(guān)文章

  • JS 中的日期時(shí)間操作計(jì)算實(shí)例

    摘要:實(shí)例一已知日期格式為,計(jì)算相對(duì)于今天的天數(shù)差。在實(shí)踐應(yīng)用中,還會(huì)有各種各樣的關(guān)于時(shí)間操作的需求,歡迎補(bǔ)充,我都將一一解答。 實(shí)例 一:已知日期格式為 YYYY/MM/DD,計(jì)算相對(duì)于今天的天數(shù)差。 function fromNow(date){ var mTimes = new Date(date); var fromTimes = Date.now() - mTime...

    beanlam 評(píng)論0 收藏0
  • vue學(xué)習(xí)筆記(二)

    摘要:供用戶在相應(yīng)的階段對(duì)其進(jìn)行操作。我們像下面這樣使用這個(gè)指令大多數(shù)情況下,我們只需要使用與鉤子函數(shù)。里提供了函數(shù)的簡(jiǎn)寫(xiě)形式鉤子函數(shù)有兩個(gè)常用的參數(shù)和。其他用法與全局自定義指令一致。 一、vue生命周期 vue實(shí)例從創(chuàng)建到銷(xiāo)毀的過(guò)程,稱(chēng)為生命周期,共有八個(gè)階段。 這八個(gè)階段里分別有一個(gè)叫做鉤子函數(shù)的實(shí)例選項(xiàng)。供用戶在相應(yīng)的階段對(duì)其進(jìn)行操作。 beforeCreate(){ //組件實(shí)例剛...

    klivitamJ 評(píng)論0 收藏0
  • vue學(xué)習(xí)筆記(二)

    摘要:供用戶在相應(yīng)的階段對(duì)其進(jìn)行操作。我們像下面這樣使用這個(gè)指令大多數(shù)情況下,我們只需要使用與鉤子函數(shù)。里提供了函數(shù)的簡(jiǎn)寫(xiě)形式鉤子函數(shù)有兩個(gè)常用的參數(shù)和。其他用法與全局自定義指令一致。 一、vue生命周期 vue實(shí)例從創(chuàng)建到銷(xiāo)毀的過(guò)程,稱(chēng)為生命周期,共有八個(gè)階段。 這八個(gè)階段里分別有一個(gè)叫做鉤子函數(shù)的實(shí)例選項(xiàng)。供用戶在相應(yīng)的階段對(duì)其進(jìn)行操作。 beforeCreate(){ //組件實(shí)例剛...

    Pines_Cheng 評(píng)論0 收藏0
  • vue學(xué)習(xí)筆記(二)

    摘要:供用戶在相應(yīng)的階段對(duì)其進(jìn)行操作。我們像下面這樣使用這個(gè)指令大多數(shù)情況下,我們只需要使用與鉤子函數(shù)。里提供了函數(shù)的簡(jiǎn)寫(xiě)形式鉤子函數(shù)有兩個(gè)常用的參數(shù)和。其他用法與全局自定義指令一致。 一、vue生命周期 vue實(shí)例從創(chuàng)建到銷(xiāo)毀的過(guò)程,稱(chēng)為生命周期,共有八個(gè)階段。 這八個(gè)階段里分別有一個(gè)叫做鉤子函數(shù)的實(shí)例選項(xiàng)。供用戶在相應(yīng)的階段對(duì)其進(jìn)行操作。 beforeCreate(){ //組件實(shí)例剛...

    ideaa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<