# builtin.math 库模块帮助文档

## math 成员列表 <a id="math" href="#math">&#x23;</a>

### math.e <a id="math.e" href="#math.e">&#x23;</a>
自然对数的底数，约等于 2.718281828459 。

### math.fmod(x,y) <a id="math.fmod" href="#math.fmod">&#x23;</a>
计算并返回浮点数除法 x/y 的余数，  
返回的余数符号与被除数 x 相同（基于向零取整）。  
注意在 aardio 中 `x % y` 返回的余数符号与 y 相同（基于向下取整）。

### math.isFinite() <a id="math.isFinite" href="#math.isFinite">&#x23;</a>
如果参数是一个有效数值,  
并且不是正负无穷大则返回 true，否则返回 false。  
如果传入字符串会直接返回 false

### math.isInteger() <a id="math.isInteger" href="#math.isInteger">&#x23;</a>
参数是一个数值并且是整数返回true，否则返回false。  
如果传入字符串会直接返回 false

### math.isSize64() <a id="math.isSize64" href="#math.isSize64">&#x23;</a>
判断参数是否 math.size64 长整数对象

### math.mulDiv(a,b,c) <a id="math.mulDiv" href="#math.mulDiv">&#x23;</a>
返回a乘b再除以c的结果,并自动四舍五入转为整数  
可尽量使运算不会溢出,运算错误则返回-1  

注意这个函数是系统 API 函数，  
参数只能传入数值不能传入字符串

### math.round <a id="math.round" href="#math.round">&#x23;</a>
四舍五入，舍入规则以取整为例：  
小数小于0.5取相邻的绝对值更小的整数，  
小数大于0.5取相邻的绝对值更大的整数，  
小数等于0.5取相邻的正无穷大方向的整数。  

注意四舍五入非常多的规则，  
各种语言的默认实现并不完全一致，  
计算机浮点数都存在可容忍的精度误差

### math.round(数值,精度) <a id="math.round" href="#math.round">&#x23;</a>
四舍五入取接近的数，  
精度指定小数后的位数,默认为0（取整）

### math.roundToEven <a id="math.roundToEven" href="#math.roundToEven">&#x23;</a>
银行家舍入法，  
舍入规则为：尾数四舍六入，五后为零前凑偶（只看一位零，用于修正浮点误差）。  
用于解决 1 到 9 出现机率一样，5到9进位导致进多舍少的问题。  

aardio 取整默认使用标准银行家舍入法，  
只有需要指定精度时才有必要使用 math.roundToEven 。  

注意四舍五入存在不同规则，各语言默认实现并非完全一致，  
计算机浮点数也存在可容忍的误差。

### math.roundToEven(数值,精度) <a id="math.roundToEven" href="#math.roundToEven">&#x23;</a>
使用改良版银行家舍入法转换并返回参数@1指定的数值，  
参数@2指定返回数值的小数位数,默认为0（也就是取整）

### math.stringify <a id="math.stringify" href="#math.stringify">&#x23;</a>
将数值转换为字符串。  
可避免使用科学计数法，也不会在小数后补 0 。  

aardio 在将数值转换为字符串时，  
大于等于 `1e14` 或者小于 `1e-4` (即 0.0001) 的数默认以科学计数法表示。  
等价于调用 string.format 函数并将格式化代码指定为 `%.14g`

### math.stringify(数值,最大小数位) <a id="math.stringify" href="#math.stringify">&#x23;</a>
- 将参数 @1 指定的数值或 math.size64 对象转换为 10 进制字符串。  
参数 @1 指定其他类型参数则转换为字符串后返回。  
- 可选用参数 @2 指定最大小数位数，默认为 15。  

返回的字符串不使用科学计数法，小数尾部不会补 0。  
此函数使用区域设置的小数点，需要自定义小数点请改用 tostring 函数。

### math.validateRange(length,startIndex,endIndex) <a id="math.validateRange" href="#math.validateRange">&#x23;</a>
校验并转换基于 1 的索引范围数值。  
省略 startIndex 则默认为 1,省略 endIndex 则默认为 length。  
如果 startIndex 或 endIndex 为负数则按尾部倒计数并转换为正值，-1 表示最后一个。  
如果转换后 startIndex 小于 1 则设为 1，如果 endIndex 大于 length 则设为 length。\如果 startIndex,endIndex 都指定正整数，则可以省略 length（不校验最大长度）。  

转换后如果 startIndex 大于 endIndex 则返回 null，  
否则返回转换后的 startIndex,endIndex
