当前位置: 首页> 健康> 科研 > js四舍五入和计算精度问题处理

js四舍五入和计算精度问题处理

时间:2025/7/12 2:23:31来源:https://blog.csdn.net/qq_32442967/article/details/139329556 浏览次数:0次

js四舍五入和计算精度问题处理

目录

    • js四舍五入和计算精度问题处理
      • 错误计算
      • 方法
      • 示例
      • 代码

js中加减乘除,部分数据会存在计算不准确。

错误计算

在这里插入图片描述

我使用的是big.js,基于big.js库封装了下工具方法,当然也可以用其他库,如mathjs/bignumber.js

方法

  • numberToFixed():四舍五入
  • numberMultiply:乘法
  • numberDiv():除法
  • numberPlus():加法
  • numberMinus():减法

示例

numberMultiply(0.2, 0.7) // 0.14 乘法
numberMultiply(0.2, ‘0.7’) // 0.14 可以是字符串类型的数字
numberMultiply(0.2, 0.7, 4, false) // ‘0.1400’

numberDiv(5, 2) // 2.5 除法
numberPlus(5, 2) // 7 加法
numberMinus(5, 2) // 3 减法

// 四舍五入
numberToFixed(12.225, 2) // 12.23
numberToFixed(12.225, 4, false) // ‘12.2250’

代码

numberUtil.ts

/*** @fileOverview 数值计算工具类* @date 2024-5-30*/
import Big from 'big.js';
/*** 四舍五入* @param number 数字* @param precision 精度,不传则默认保留两位小数* @param isReturnNumber 是否返回数字类型,默认返回数字类型,否则返回字符串类型*/
export function numberToFixed(number: number | string, precision = 2, isReturnNumber = true) {try {const bigNum = new Big(number).round(precision);// 直接返回数字类型if (isReturnNumber) return bigNum.toNumber().valueOf();// 返回字符串类型,不足位数用0补齐return bigNum.toFixed(precision).valueOf();} catch (e) {return '';}
}type numberComputeType = 'times' | 'div' | 'plus' | 'minus';/*** 数值计算* @param type* @param number1 数值1* @param number2 数值2* @param precision 精度,不传不处理精度* @param isReturnNumber 是否返回数字类型,默认返回数字类型,否则返回字符串类型*/
function numberCompute(type: numberComputeType,number1: number | string,number2: number | string,precision: number | undefined,isReturnNumber: boolean | undefined
) {try {const bigNum = new Big(number1)[type](number2);const value = bigNum.toNumber().valueOf();if (precision === 0 || precision) return numberToFixed(value, precision, isReturnNumber);return value;} catch (e) {return '';}
}/*** 数值计算* @params [数值1, 数值2, 精度?, 是否返回数字类型?]*/
type numberComputeArgs = [string | number, string | number, number?, boolean?];/*** 乘法* @param args 数值1, 数值2, 精度?, 是否返回数字类型?*/
export const numberMultiply = (...args: numberComputeArgs) => numberCompute('times', ...args);/*** 除法* @param args 数值1, 数值2, 精度?, 是否返回数字类型?*/
export const numberDiv = (...args: numberComputeArgs) => numberCompute('div', ...args);
/*** 加法* @param args 数值1, 数值2, 精度?, 是否返回数字类型?*/
export const numberPlus = (...args: numberComputeArgs) => numberCompute('plus', ...args);
/*** 减法* @param args 数值1, 数值2, 精度?, 是否返回数字类型?*/
export const numberMinus = (...args: numberComputeArgs) => numberCompute('minus', ...args);
关键字:js四舍五入和计算精度问题处理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: