JavaScript中默认的数字精度比较小。如下图所示:
为了保证我们的数字的准确度,web3.js中添加了一个依赖库BigNumber,专门用于大数处理。
1、首先新建一个文件夹,用于测试我们的bignumber库。下载web3库。
>mkdir web3_test
>npm init//生成package.json文件
>npm install web3@0.20.1 --save-dev
>cd node_modules
>ls//可以查看下node_modules中文件结构'''
node_modules中文件.png
2、重新打开另一个terminal,node进入控制台。
>var balance = new BigNumber('11112222333344444555555666666777777888889999')
显示错误: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 ] }
可以看出,经过bignumber转换之后,可以完整的保留我们数据的精度。
BigNumber中包含三个参数,s,e,c。
s:符号,1表示正数,-1表示负数
e:整数部分的位数,注意这个数值等于数据整数个数-1。
c:将数据切段存储,14位切割一次,小数部分不足14位,后面补0。
为了方便查看,还可以将数值转换成字符串,并指定进制。
>balance2.toString(2)//转换为二进制字符串
>balance2.toString(16)//转换为十六进制字符串
网友评论