xms-basic-util
Version:
js基础工具类集合,集成方便后期调用,通过webpack编译,支持多种平台,如es6、node、浏览器引入等 ## 使用 ### es6方法 - 安装 ``` npm install xms-basic-util ``` - 导入 ``` import xmsBasicUtil from 'xms-basic-util' //日期转换工具对象 const dateFormat = xmsBasicUtil.dateFormat; //数字处理工具对象 const mathUtil = xmsBasicUt
150 lines (118 loc) • 4.33 kB
Markdown
# 数字工具使用说明
## mathUtil
`mathUtil`提供了数字的运算方法,解决数字精度丢失(浮点数精度问题)的一些典型问题;
下面示例中有列举一些使用简单运算符精度丢失与调用`mathUtil`方法不丢失的对比,基本上能解决因浮点数精度丢失的问题;
### 方法
#### 乘法
- 语法
```
accMul(arg1, arg2, decimals)
```
数字之间的乘法,支持设置保留小数的位数,默认为2位
| 参数 | 描述 |
| ----------------- | -------------------------|
| `arg1` | 必需 数字|
| `arg2` | 必需 数字 |
| `decimals` | 可选、保留小数位数,正整数,如果没有传,保留原始位数 |
- 示例
```$xslt
19.9 * 100 // 1989.9999999999998
mathUtil.accMul(19.9, 100) // 1990
mathUtil.accMul(19.9, 100, 2) // 1990
0.11*1.1 // 0.12100000000000001
mathUtil.accMul(0.11, 1.1)// 0.121
```
#### 除法
- 语法
```$xslt
accDiv(arg1, arg2, decimals)
```
数字之间的除法,支持设置保留小数的位数,默认为2位
| 参数 | 描述 |
| ----------------- | -------------------------|
| `arg1` | 必需 数字|
| `arg2` | 必需 数字 |
| `decimals` | 可选、保留小数位数,正整数,如果没有传,保留原始位数 |
- 示例
```$xslt
0.121/0.11 // 1.0999999999999999
mathUtil.accDiv(0.121, 0.11) // 1.1
```
#### 加法
- 语法
```$xslt
accAdd(arg1, arg2)
```
数字之间的加法
| 参数 | 描述 |
| ----------------- | -------------------------|
| `arg1` | 必需 数字|
| `arg2` | 必需 数字|
- 示例
```$xslt
0.1 + 0.2 // 0.30000000000000004
mathUtil.accAdd(0.1, 0.2) // 0.3
```
#### 减法
- 语法
```$xslt
accSub(arg1, arg2)
```
数字之间的减法
| 参数 | 描述 |
| ----------------- | -------------------------|
| `arg1` | 必需 数字|
| `arg2` | 必需 数字 |
- 示例
```$xslt
0.3 - 0.1 // 0.19999999999999998
mathUtil.accSub(0.3, 0.1) // 0.2
```
#### 四舍五入指定小数位
- 语法
```$xslt
toFixed(num, length)
```
toFixed 指定小数位进行四舍五入,跟`Math.toFixed`作用类似,解决浮点数字精度失真的问题
| 参数 | 描述 |
| ----------------- | -------------------------|
| `num` | 必需 数字|
| `length` | 必需 保留小数位数,正整数 |
- 示例
```$xslt
1.335.toFixed(2) // 1.33
mathUtil.toFixed(1.335, 2) //1.34
```
#### 二进制转换成十进制
- 语法
```$xslt
binaryFloatToDecimal(binaryNum, radix)
```
该方法主要是解决`二进制`带小数转`十进制`的问题,`八进制`或`十六进制`也支持。
十进制转换成二进制,可以使用toString()来实现;只有整数的二进制转十进制,可以使用parseInt()来实现,
具体的转换,可以查看[JS实现十进制与二进制的互相转换](binaryToDecimal.md)
| 参数 | 描述 |
| ----------------- | -------------------------|
| `binaryNum` | 必需 默认是二进制|
| `radix` | 可选 binaryNum对应的进制数,默认为2,如果binaryNum是8进制,则需要传8,其他进制类似 |
- 示例
```$xslt
mathUtil.binaryFloatToDecimal(1010) // 10
mathUtil.binaryFloatToDecimal(1010.1) // 10.5
mathUtil.binaryFloatToDecimal(1010,2) // 10
mathUtil.binaryFloatToDecimal(1010.1,2) // 10.5
mathUtil.binaryFloatToDecimal(1010, 8) // 520
mathUtil.binaryFloatToDecimal(1010.1, 8) // 520.125
mathUtil.binaryFloatToDecimal(1010.1001) // 10.5625
```
**[测试用例地址](../test/mathUtil.js)**
npm install 依赖包安装完后,进入到项目路径中,执行以下命令可以运行测试脚本
```$xslt
babel-node test/mathUtil.js
```
>为什么要使用`babel-node`?而不是使用`nodejs`直接运行,
>`nodejs`采用的是`CommonJS`的模块化规范,使用`require`引入模块;
>而`import`是ES6的模块化规范关键字。想要使用`import`,必须引入`babel`转义支持,
>通过`babel`进行编译,使其变成node的模块化代码。
**[JS数字丢失精度的原因](precision.md)**
**[JS实现十进制与二进制的互相转换](binaryToDecimal.md)**