在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ javascirpt 為什么 0.3-0.2結(jié)果不準確

javascirpt 為什么 0.3-0.2結(jié)果不準確

javascirpt 為什么 0.3-0.2,0.3-0.1結(jié)果不準確,js還有哪些諸如此類的bug,另外用vue寫股票實時數(shù)據(jù)這種頁面除了定時器獲取數(shù)據(jù)渲染頁面,還有什么好的方法

回答
編輯回答
萌二代
javascirpt 為什么 0.3-0.2,0.3-0.1結(jié)果不準確,js還有哪些諸如此類的bug

這不是 bug ,去了解下“計算機原理”中的關(guān)于浮點數(shù)的基本概念。

2017年8月27日 03:53
編輯回答
萌吟
  1. 因為 js 里面浮點數(shù)運算不是 100% 精確的,解決方法:以你給的例子可以 (0.3 * 10 + 0.2 * 10) / 10,即先轉(zhuǎn)換成整數(shù)
  2. 很多語言在設(shè)計上都會有一定的缺陷,有的是設(shè)計失誤,有的是折中取舍。你可以搜索下 js 缺陷 陷阱 等關(guān)鍵字,會找到你想要的
  3. 可以使用 websocket,讓服務(wù)器推送
2018年5月24日 01:44
編輯回答
互擼娃
  1. 浮點數(shù)計算都會有舍入誤差的
  2. 實時的數(shù)據(jù)可以通過與服務(wù)器建立websocket或者服務(wù)器主動推送
2018年4月12日 17:25
編輯回答
野橘

計算機計算浮點數(shù)的時候是要轉(zhuǎn)換成二進制的,二進制的0.3和0.2分別是
0.010011001100110...........
0.001100110011001................
很長的一段,計算機存儲位數(shù)有限,加完之后再轉(zhuǎn)換成10進制時就出現(xiàn)那種0.099999.....的情況

2017年3月15日 05:40
編輯回答
綰青絲

這是原來看到的代碼,先將小數(shù)轉(zhuǎn)換成整形,計算結(jié)束后再轉(zhuǎn)換回去

    function add(num1, num2){ 
        let r1, r2, m;
        r1 = (''+num1).split('.')[1].length; 
        r2 = (''+num2).split('.')[1].length; 
        m = Math.pow(10,Math.max(r1,r2)); 
        return (num1 * m + num2 * m) / m; 
    } 
    console.log(add(0.1,0.2)); //0.3 
    console.log(add(0.15,0.2256));
2018年2月13日 07:39