優秀的js拓展數學庫math.js,解決精度問題

      網友投稿 1239 2025-03-31

      今天飛哥推薦一個前端在計算上面必定會用到的類庫:mathjs。

      電商系統中,訂單、庫存中有數字等加減乘除算術,還有做工業計算的,前端怎么算也不對,我們先看看不對的例子。

      JS常見加減乘除算不對的例子

      加法算術:0.1+0.2

      console.log(0.1+0.2); 結果是:0.30000000000000004

      減法算術:1-0.9

      console.log(1-0.9); 結果是:0.09999999999999998

      乘法算術 4.10*100

      console.log(4.10*100); 結果是:409.99999999999994

      除法法算術 6.10/0.1

      console.log(6.10/0.1); 結果是:60.99999999999999

      超過9007199254740992的大數加法

      console.log(9007199254740992+1); 結果是9007199254740992

      javaScript 浮點數運算結果不對,因浮點數的存儲問題導致計算結果不對,解決方案是引入數學庫math.js,在線上項目中表現很優秀。

      math.js 介紹

      Math.js是一個用于javaScript和Node.js的擴展數學庫。它具有支持符號計算的靈活表達式解析器,大量內置函數和常量,并提供了集成的解決方案來處理不同的數據類型,例如數字,大數,復數,分數,單位和矩陣,強大且易于使用。

      官網:https://mathjs.org/

      Github代碼庫:https://github.com/josdejong/mathjs

      文檔:https://mathjs.org/docs/index.html

      特征

      支持數字,大數,復數,分數,單位,字符串,數組和矩陣。

      與JavaScript的內置Math庫兼容,Math用法,一樣,門檻低

      優秀的js拓展數學庫math.js,解決精度問題

      包含一個靈活的表達式解析器。

      進行符號計算。

      帶有大量內置函數和常量。

      也可以用作命令行應用程序。

      在任何JavaScript引擎上運行。

      很容易擴展。

      開源。

      幫助使用教程:

      1、傳統使用,引入math.js

      ?? ?? ????const?ans?=?math.add(0.1,?0.2)?????//??0.30000000000000004 ????console.log(math.format(ans,?{precision:?14}))?//?'0.3' ????console.log(math.sqrt(4).toString())?//?2 ??

      npm安裝

      npm?install?mathjs

      2、ES modules

      import?{?sqrt?}?from?'mathjs' console.log(sqrt(-4).toString())?//?2i

      創建配置

      import?{?create,?all?}?from?'mathjs' //?create?a?mathjs?instance?with?configuration const?config?=?{ ??epsilon:?1e-12, ??matrix:?'Matrix', ??number:?'number', ??precision:?64, ??predictable:?false, ??randomSeed:?null } const?math?=?create(all,?config) //?read?the?applied?configuration console.log(math.config()) //?change?the?configuration math.config({ ??number:?'BigNumber' })

      3、Node.js

      const?{?sqrt?}?=?require('mathjs') console.log(sqrt(-4).toString())?//?2i

      math.js 常用數學功能

      //?functions?and?constants console.log('functions?and?constants') print(math.e);???//自然對數??2.718281828459? print(math.pi);???//π?3.1415926535898 console.log(Math.random()); print(math.round(math.e,?3))?//四舍五入,保留3位?2.718 print(math.atan2(3,?-3)?/?math.pi)?//?0.75 print(math.log(10000,?10))?//?4 print(math.sqrt(-4))?//?2i print(math.pow([[-1,?2],?[3,?1]],?2))?//?[[7,?0],?[0,?7]] print(math.derivative('x^2?+?x',?'x'))?//?2?*?x?+?1 console.log() //?expressions console.log('expressions') print(math.evaluate('1.2?*?(2?+?4.5)'))?//?7.8 print(math.evaluate('12.7?cm?to?inch'))?//?5?inch print(math.evaluate('sin(45?deg)?^?2'))?//?0.5 print(math.evaluate('9?/?3?+?2i'))?//?3?+?2i print(math.evaluate('det([-1,?2;?3,?1])'))?//?-7 console.log() //?chained?operations console.log('chained?operations') const?a?=?math.chain(3) ??.add(4) ??.multiply(2) ??.done() print(a)?//?14 console.log() //?mixed?use?of?different?data?types?in?functions console.log('mixed?use?of?data?types') print(math.add(4,?[5,?6]))?//?number?+?Array,?[9,?10] print(math.multiply(math.unit('5?mm'),?3))?//?Unit?*?number,??15?mm print(math.subtract([2,?3,?4],?5))?//?Array?-?number,?[-3,?-2,?-1] print(math.add(math.matrix([2,?3]),?[4,?5]))?//?Matrix?+?Array,?[6,?8] console.log() /** ?*?Helper?function?to?output?a?value?in?the?console.?Value?will?be?formatted. ?*?@param?{*}?value ?*/ function?print?(value)?{ ??const?precision?=?14 ??console.log(math.format(value,?precision)) }

      math.js 大數功能

      //?functions?and?constants console.log('mathjs?BigNumber?eg') print(math.add(math.bignumber(0.1),?math.bignumber(0.2)))?//?加法?BigNumber,?0.3 print(math.subtract(math.bignumber(1),?math.bignumber(0.9)))?//?減法?BigNumber,?0.1 print(math.multiply(math.bignumber(4.10),?math.bignumber(100)))?//?乘法?BigNumber,?0.1 print(math.ceil(math.bignumber(6.10)/?math.bignumber(0.1)));???//除法?向上取整?61 print(math.floor(math.bignumber(6.10)/?math.bignumber(0.1)));???//除法?向下取整?61 print(math.round(math.bignumber(6.10)/?math.bignumber(0.1)));???//?除法?四舍五入?61 /** ?*?Helper?function?to?output?a?value?in?the?console.?Value?will?be?formatted. ?*?@param?{*}?value ?*/ function?print?(value)?{ ??const?precision?=?14 ??console.log(math.format(value,?precision)) }

      javascript

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:太陽能電池片生產制造工藝
      下一篇:WPS 表格 填沖內容保存后,j經過改過內容,又保存,結果過幾天后,發現表格里的內容又變回沒改以
      相關文章
      国产性爱在线观看亚洲黄色一级片 | 丰满亚洲大尺度无码无码专线 | 亚洲youjizz| 亚洲av午夜福利精品一区| 亚洲色大成网站WWW久久九九 | ww亚洲ww在线观看国产| 亚洲一级毛片免费看| 亚洲国产综合在线| 亚洲人妖女同在线播放| 激情内射亚洲一区二区三区爱妻| 亚洲三级视频在线| 亚洲日韩国产欧美一区二区三区| 亚洲大码熟女在线观看| 亚洲av成人中文无码专区| 国产产在线精品亚洲AAVV| 亚洲国产成人精品女人久久久 | 亚洲免费中文字幕| 亚洲视频无码高清在线| 亚洲一区二区三区成人网站 | 亚洲妇熟XXXX妇色黄| 亚洲AV日韩AV鸥美在线观看| 亚洲最大的成网4438| 亚洲国产成人超福利久久精品 | 亚洲乳大丰满中文字幕| 国产AV无码专区亚洲AV毛网站 | 在线视频亚洲一区| jlzzjlzz亚洲乱熟在线播放| 亚洲国产美女精品久久久久∴| 亚洲欧洲∨国产一区二区三区| 亚洲成a人片在线观看无码 | 色婷婷亚洲一区二区三区| 亚洲国产精品第一区二区三区| 亚洲中文字幕伊人久久无码| 亚洲精品无码Av人在线观看国产| 午夜亚洲AV日韩AV无码大全| 亚洲国产午夜电影在线入口| 亚洲精品动漫免费二区| 亚洲日韩涩涩成人午夜私人影院| 精品国产亚洲一区二区三区| 久久夜色精品国产噜噜噜亚洲AV | 亚洲日韩一页精品发布|