精確加減乘除

1. 前言

  1. 單個功能一篇發(fā)展也方便自己使用
  2. 加減乘除 是常見的功能,但是經(jīng)常會遇到不精準(zhǔn)的問題,
    典型的比如 0.2+ 0.1 === 0.3 問題

2. 加法代碼

  // 加法封裝 add(0.1, 0.2, 0.3, 0.4) => 1访忿±舳觯可以傳多個參數(shù)進(jìn)行相加
 const add = (...val)=> {
    let max = 0;
    let count = 0;
    for (let i = 0; i < val.length; i++) {
      const strVal = val[i].toString();
      const index = strVal.indexOf(".");
      let num = 0;
      if (index > -1) {
        num = strVal.length - 1 - index;
        max = num > max ? num : max;
      }
    }
    for (let i = 0; i < val.length; i++) {
      count += Math.round(val[i] * Math.pow(10, max));
    }
    return count / Math.pow(10, max);
  },
     

3. 減法

  // 減法封裝  sub(1, 0.2, 0.3, 0.4) => 0.1。相當(dāng)于1 - 0.2 -0.3 -0.4;可以傳多個參數(shù),使用首位減后面的所有參數(shù)。
 const  sub = (...val) =>{
    let sum,
      maxDecimalLength = getMaxDecimalLength(...val);
    val.forEach((x, index) => {
      let nurVal = Math.round(x * Math.pow(10, maxDecimalLength));
      if (index === 0) sum = nurVal;
      else sum -= nurVal;
    });
    return sum / Math.pow(10, maxDecimalLength);
  },
  1. getMaxDecimalLength 方法 獲取小數(shù)位數(shù)在下面有寫

4. 乘法

  // 乘法ride(0.5, 0.6) => 3, 只允許傳入兩個參數(shù)。%計算可以這樣ride(0.5, 100) => 50奋构。
  ride(...val) {
    const strVal = val[0].toString();
    const strValTwo = val[1].toString();
    const index = strVal.indexOf(".");
    const indexTwo = strValTwo.indexOf(".");
    const num = [0, 0];
    if (index > -1) {
      num[0] = strVal.length - 1 - index;
    }
    if (indexTwo > -1) {
      num[1] = strValTwo.length - 1 - index;
    }
    return (
      Math.round(
        val[0] * Math.pow(10, num[0]) * (val[1] * Math.pow(10, num[1]))
      ) / Math.pow(10, num[0] + num[1])
    );
  }

5. 除法

  // 除法exc(0.5, 0.2) => 2.5, 只允許傳入兩個參數(shù)。如果計算出現(xiàn)無窮數(shù)請后期根據(jù)需要修改最后代碼進(jìn)行取舍拱层。
  exc(val, valTwo = 100) {
    const strVal = val.toString();
    const strValTwo = valTwo.toString();
    const index = strVal.indexOf(".");
    const indexTwo = strValTwo.indexOf(".");
    const num = [0, 0];
    if (index > -1) {
      num[0] = strVal.length - 1 - index;
    }
    if (indexTwo > -1) {
      num[1] = strValTwo.length - 1 - index;
    }
    return (
      Math.round(val * Math.pow(10, num[0])) /
      (Math.round(valTwo * Math.pow(10, num[1])) *
        Math.pow(10, num[0] - num[1]))
    );
  }

6. 獲取小數(shù)位數(shù)

 /*
   * 獲取小數(shù)位數(shù)
   */
  getMaxDecimalLength(...val) {
    // 最大小數(shù)位長度
    let maxDecimalLength = 0;
    val.forEach((x) => {
      const strVal = x.toString(),
        dotIndex = strVal.indexOf(".");
      if (dotIndex > -1) {
        // 獲取當(dāng)前值小數(shù)位長度
        let curDecimalLength = strVal.length - 1 - dotIndex;
        if (curDecimalLength > maxDecimalLength) {
          maxDecimalLength = curDecimalLength;
        }
      }
    });
    return maxDecimalLength;
  },

參考資料


初心

我所有的文章都只是基于入門弥臼,初步的了解;是自己的知識體系梳理,如有錯誤,道友們一起溝通交流;
如果能幫助到有緣人,非常的榮幸,一切為了部落的崛起;
共勉
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末根灯,一起剝皮案震驚了整個濱河市径缅,隨后出現(xiàn)的幾起案子掺栅,更是在濱河造成了極大的恐慌,老刑警劉巖纳猪,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氧卧,死亡現(xiàn)場離奇詭異,居然都是意外死亡氏堤,警方通過查閱死者的電腦和手機(jī)沙绝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丽猬,“玉大人宿饱,你說我怎么就攤上這事〗潘睿” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵强饮,是天一觀的道長由桌。 經(jīng)常有香客問我,道長邮丰,這世上最難降的妖魔是什么行您? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮剪廉,結(jié)果婚禮上娃循,老公的妹妹穿的比我還像新娘。我一直安慰自己斗蒋,他們只是感情好捌斧,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泉沾,像睡著了一般捞蚂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跷究,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天姓迅,我揣著相機(jī)與錄音,去河邊找鬼俊马。 笑死丁存,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的柴我。 我是一名探鬼主播解寝,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屯换!你這毒婦竟也來了编丘?” 一聲冷哼從身側(cè)響起与学,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘉抓,沒想到半個月后索守,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡抑片,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年卵佛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞斋。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡截汪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出植捎,到底是詐尸還是另有隱情衙解,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布焰枢,位于F島的核電站蚓峦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏济锄。R本人自食惡果不足惜暑椰,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荐绝。 院中可真熱鬧一汽,春花似錦、人聲如沸低滩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽委造。三九已至戳鹅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昏兆,已是汗流浹背枫虏。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留爬虱,地道東北人隶债。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像跑筝,于是被迫代替她去往敵國和親死讹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容