JavaScript中默認(rèn)的數(shù)字精度比較小俐银。如下圖所示:
為了保證我們的數(shù)字的準(zhǔn)確度,web3.js中添加了一個(gè)依賴庫BigNumber,專門用于大數(shù)處理内颗。
1、首先新建一個(gè)文件夾敦腔,用于測試我們的bignumber庫均澳。下載web3庫。
>mkdir web3_test
>npm init//生成package.json文件
>npm install web3@0.20.1 --save-dev
>cd node_modules
>ls//可以查看下node_modules中文件結(jié)構(gòu)'''
2符衔、重新打開另一個(gè)terminal找前,node進(jìn)入控制臺(tái)。
>var balance = new BigNumber('11112222333344444555555666666777777888889999')
顯示錯(cuò)誤:ReferenceError: BigNumber is not defined
需要引入bignumber.js判族,定義BigNumber.
> var BigNumber = require('bignumber.js')
undefined
> var balance4 = new BigNumber('-123456789123456789.11111222223333344444555556666677777')
undefined
> balance4
BigNumber {
s: -1,
e: 17,
c:
[ 1234,
56789123456789,
11111222223333,
34444455555666,
66777770000000 ] }
> var balance5 = new BigNumber('123456789123456789.11111222223333344444555556666677777')
undefined
> balance5
BigNumber {
s: 1,
e: 17,
c:
[ 1234,
56789123456789,
11111222223333,
34444455555666,
66777770000000 ] }
> var balance2 = new BigNumber('111222333444555666777888999')
undefined
> balance2
BigNumber { s: 1, e: 26, c: [ 1112223334445, 55666777888999 ] }
可以看出躺盛,經(jīng)過bignumber轉(zhuǎn)換之后,可以完整的保留我們數(shù)據(jù)的精度形帮。
BigNumber中包含三個(gè)參數(shù)颗品,s,e沃缘,c躯枢。
s:符號(hào),1表示正數(shù)槐臀,-1表示負(fù)數(shù)
e:整數(shù)部分的位數(shù)锄蹂,注意這個(gè)數(shù)值等于數(shù)據(jù)整數(shù)個(gè)數(shù)-1。
c:將數(shù)據(jù)切段存儲(chǔ)水慨,14位切割一次得糜,小數(shù)部分不足14位,后面補(bǔ)0晰洒。
為了方便查看朝抖,還可以將數(shù)值轉(zhuǎn)換成字符串,并指定進(jìn)制谍珊。
>balance2.toString(2)//轉(zhuǎn)換為二進(jìn)制字符串
>balance2.toString(16)//轉(zhuǎn)換為十六進(jìn)制字符串