📜  第 2 轮小数 js - Javascript (1)

📅  最后修改于: 2023-12-03 15:27:23.567000             🧑  作者: Mango

第2轮小数js - Javascript

简介

本文主要是介绍Javascript中处理小数(浮点数)的一些技巧和常见问题,涉及到小数的基本知识、运算精度问题、转换问题、工具库等等。

小数的基本知识

在计算机中,小数值使用浮点数表示,其中IEEE 754标准定义了各种浮点数类型及其操作。而Javascript中使用的是64位浮点数,也就是Double类型。

在javascript中使用小数的过程中,会导致精度问题,导致计算结果出现误差,需要注意。

运算精度问题

由于javascript采用的是二进制浮点数的方式来表示小数,而二进制小数值乘、除都会导致精度的问题,常见的解决办法有四舍五入和转化为整数进行计算。

四舍五入

使用 toFixed() 方法可以在计算过程中四舍五入保留小数位数。

let a = 0.3333;
let b = 0.6666;
let sum = a + b;
console.log(sum.toFixed(2)); // 输出 1.00
转整数计算

将小数转为整数后进行计算,最后再转回小数,可以有效避免精度问题。

let a = 0.1;
let b = 0.2;
let sum = (a * 10 + b * 10) / 10;
console.log(sum); // 输出 0.3
转换问题

在进行小数的字符串拼接或者其他转换操作时,也需要注意小数的精度。

字符串转小数

使用 parseFloat() 方法可以把字符串转换成小数,如果字符串不能被解析成小数,则返回 NaN。

let str = "3.14";
let num = parseFloat(str);
console.log(num + 1); // 输出 4.14
小数转字符串

使用 toString()toFixed() 方法可以把小数转换成指定精度的字符串。

let num = 0.33333333333;
let str = num.toFixed(2);  // 转为字符串,并保留2位小数
console.log(str); // 输出 0.33
工具库

为了方便处理小数的精度问题,可以借助一些工具库,比如 decimal.jsmathjs

decimal.js

decimal.js 是一个纯粹的JavaScript小数库,具有舍入控制、数学操作和格式化等功能。详情可以参考 GitHub官网:https://github.com/MikeMcl/decimal.js/

mathjs

mathjs 是一个用于数学运算的工具类库,提供了大量的数学函数和运算符,具有高精度计算、矩阵计算和单位处理等功能。详情可以参考官网:https://mathjs.org/

let x = math.divide(math.bignumber("0.1"), math.bignumber("0.2"));
console.log(x); // 输出 0.5
结语

小数在Javascript中的处理可能会带来一些问题,但借助于一些小数处理库或者技巧,可以有效地避免这些问题。希望本文对你有所帮助。