关于toFixed四舍五入的精度问题

news/2024/10/19 20:23:27/

在日常使用toFixed的时候总会遇到一些奇奇怪怪的问题,经常会出现保留小数位数出现错误的时候,从网上搜索了一下,主流的说法是他们的算法是银行家舍入法,有兴趣大家可以自行百度。

比如:

3.55.toFixed(1) // 结果为3.5

大概意思就是 3.55在toFixed看来它是3.5499999循环9,所以在保留一位小数的时候是3.5而不是3.6

有两种方法解决问题:

第一种就是使用插件:number-precision

npm install number-precision --saveimport NP from 'number-precision'NP.round(3.55, 1);  // 3.6

其中number-precision还有许多解决关于js的精度问题

console.log(0.1 + 0.2)  // 0.30000000000000004NP.plus(0.1, 0.2)  // 0.3// 其他用法 大家可以自行使用
NP.plus(num1, num2, num3, ...)   // num + num2 + num3
NP.minus(num1, num2, num3, ...)  // num1 - num2 - num3
NP.times(num1, num2, num3, ...)  // num1 * num2 * num3
NP.divide(num1, num2, num3, ...) // num1 / num2 / num3

第二种方法:自己封装

以下是从掘金上看大佬的写法:js精度丢失的问题,重新封装toFixed() - 掘金 (juejin.cn)

export function toFixed(num, fixed = 2) {//fixed是小数保留的位数let numSplit = num.toString().split('.');if (numSplit.length == 1 || !numSplit[1][fixed] || numSplit[1][fixed] <= 4) {return num.toFixed(fixed);}numSplit[1] = +numSplit[1].substring(0, fixed) + 1 + '';if (numSplit[1].length > fixed) {numSplit[0] = +numSplit[0] + 1;numSplit[1] = numSplit[1].substring(1, fixed + 1);}return numSplit.join('.');
}


http://www.ppmy.cn/news/1059186.html

相关文章

wazuh环境配置

目录 一、wazuh的安装 1.1官方仓库安装 1.2虚拟机OVA安装 1.2.1 然后执行下面命令 1.2.2 这里还要下载脚本和config.yml配置文件&#xff0c;用来生成证书​编辑 1.2.3然后编辑config.yml文件&#xff0c;将下面的三个IP地址改为一样的 1.2.4运行./wazuh-certs-tool.sh以…

【vue 3.0 中使用vue-router详细步骤】

Vue 3.0 中使用 vue-router 的步骤如下&#xff1a; 1. 安装 vue-router&#xff1a;2. 创建一个单独的文件&#xff1a;3.main.js 配置路由&#xff1a;4. 在 App.vue 中使用 <router-view> 组件&#xff1a;5. 在路由的组件中使用 <router-link> 组件进行导航&am…

王道考研:操作系统的概念、功能、基本特征、分类

一、操作系统的概念 OS是最接近硬件的一层软件&#xff0c;可以为上层提供更加方便的服务&#xff0c;OS的设计初衷就是为了方便管理计算机的软件硬件资源 二、操作系统的功能 &#xff1a;管理CPU&#xff0c;管理内存、管理文件、管理外设 &#xff0c;向上层提供更好的服务…

Redis 持久化的手段有哪些 ?RDB 和 AOF 有什么区别 ?

目录 1. Redis 持久化的手段有哪些 2. RDB 和 AOF 有什么区别 2.1 RDB 持久化 2.2 AOF 持久化 2.2.1 AOF 持久化策略有哪些 3. 混合持久化是如何执行的&#xff08;了解&#xff09; 1. Redis 持久化的手段有哪些 Redis 持久化的手段有三种&#xff1a; 快照方式&#…

软考高级系统架构设计师系列论文九十:论分布式数据库的设计与实现

软考高级系统架构设计师系列论文九十:论分布式数据库的设计与实现 一、分布式数据库相关知识点二、摘要三、正文四、总结一、分布式数据库相关知识点 软考高级系统架构设计师系列之:分布式存储技术

EasyPOI 实战总结

EasyPOI实战总结 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 使用EasyPOI 环境搭建 # 1.引入相关依…

windows安装新openssl后依然显示旧版本

1、Windows环境下安装升级新版本openssl后&#xff0c;通过指令openssl version -a查看版本号&#xff1a;如下 这个版本号还是是以前的老版本&#xff0c;看来得把原先的老版本删除掉才可以生效&#xff0c;但是不知道在哪里。 2、网上找了老半天也没找到答案&#xff0c;最后…

【C++11】future和async等

C11的future和async等关键字 1.async和future的概念 std::async 和 std::future 是 C11 引入的标准库功能&#xff0c;用于实现异步编程&#xff0c;使得在多线程环境中更容易处理并行任务。它们可以帮助你在不同线程中执行函数&#xff0c;并且能够方便地获取函数的结果。 在…