当前位置: 首页 > news >正文

【JS】toFixed()无法精准保留小数的解决方案

情景复现:

发现用 toFiexd()  四舍五入保留小数有时不是很精确,接下来用 a = 8.0345,b=8.045,举例如下:

var a = 8.035;
console.log(a.toFixed(2)) // 8.04
var b = 8.045;
console.log(b.toFixed(2)) // 8.04

不难看出 a 四舍五入保留两位小数为 8.04,正确;而 b 四舍五入保留两位小数应该为 8.05;

计算精度丢失的原因:

js采用64位浮点数表示法(几乎所有现代编程语言所采用),这是一种二进制表示法。二进制浮点数表示法并不能精确表示类似 0.1 这样简单的数字。

目前这个问题不只在js中才会出现,在任何使用二进制浮点数的编程语言中都会出现。

解决方案:

保留两位小数:
var a = 8.035;
var b = 8.045;
function number(data){var value = Math.round(parseFloat(data) * 100) / 100;var d = value.toString().split(".");if (d.length == 1) {value = value.toString() + ".00";return value;}if (d.length > 1) {if (d[1].length < 2) {console.log(d[1])value = value.toString() + "0";}return value;}
}
console.log(number(a));  // 8.04
console.log(number(b));  // 8.05
自定义封装:

方案一: 使用 big.js(如果有大量连续的计算推荐使用)

  • 既解决了浮点数计算精度丢失问题,又解决了 toFixed() 四舍五入精度丢失问题。
  • big.js 是 big.jsbignumber.jsdecimal.js 三姐妹中功能最少的,但也是体积最小的,压缩版只有3k,对于处理js精度丢失已经足够用了。
  import Big from 'big.js'// 运算const plus = Big(0.1).plus(0.2); // 加const minus = Big(0.3).minus(0.1); // 减const mul = Big(10.22).times(100); // 乘const div = Big(2.4).div(0.8); // 除// toFixedconst fixed = new Big(6.265).toFixed(2); // 6.27console.log(plus.toNumber(),minus.toNumber(),mul.toNumber(),div.toNumber())// 0.3 0.2 1022 3

 方案二:有具体要求精确到第几位,用科学计数法对运算结果进行四舍五入

function round(number, precision) {return Math.round(+number + 'e' + precision) / Math.pow(10, precision);
}round(8.1234567, 5);    // 8.12346

或者: 

function number(data,n){var numbers = '';// 保留几位小数后面添加几个0for (var i = 0; i < n; i++) {numbers += '0';}var s = 1 + numbers;// 如果是整数需要添加后面的0var spot = "." + numbers;// Math.round四舍五入  //  parseFloat() 函数可解析一个字符串,并返回一个浮点数。var value = Math.round(parseFloat(data) * s) / s;// 从小数点后面进行分割var d = value.toString().split(".");if (d.length == 1) {value = value.toString() + spot;return value;}if (d.length > 1) {if (d[1].length < 2) {value = value.toString() + "0";}return value;}
}// 例如:8.1235678 保留五位小数
number(8.12356,5); 

相关文章:

【JS】toFixed()无法精准保留小数的解决方案

情景复现&#xff1a; 发现用 toFiexd() 四舍五入保留小数有时不是很精确&#xff0c;接下来用 a 8.0345&#xff0c;b8.045&#xff0c;举例如下&#xff1a; var a 8.035; console.log(a.toFixed(2)) // 8.04 var b 8.045; console.log(b.toFixed(2)) // 8.04 不难看出…...

vue3版本学习

1&#xff0c;响应式ref或者reactive const aa ref(hello) const bb reactive({ aa: hello, ss: workd }) 2&#xff0c;计算属性 响应式属性经过计算得到的值(ref)&#xff0c;放到模板中&#xff0c;只会随着响应式author.books属性变化而变化 const autor …...

【WPF.NET开发】创建简单WPF应用

本文内容 先决条件什么是 WPF&#xff1f;配置 IDE创建项目设计用户界面 (UI)调试并测试应用程序 通过本文你将熟悉在使用 Visual Studio 开发应用程序时可使用的许多工具、对话框和设计器。 你将创建“Hello, World”应用程序、设计 UI、添加代码并调试错误。在此期间&#…...

视频智能分析国标GB28181云平台EasyCVR加密机授权异常是什么原因?

国标GB28181视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等。 近期有用户选择使用加密机进行EasyCVR授…...

Mysql安全之基础合规配置

一、背景 某次某平台进行安全性符合型评估时&#xff0c;列出了数据库相关安全选项&#xff0c;本文特对此记录&#xff0c;以供备忘参考。 二、安全配置 2.1、数据库系统登录时的用户进行身份标识和鉴别&#xff1b; 1&#xff09;对登录Mysql系统用户的密码复杂度是否有要…...

前后端分离项目跨域请求

一、前端vue项目 在项目中创建request.js文件&#xff0c;添加以下内容 import axios from "axios"; const api axios.create({ //这里配置的是后端服务提供的接口baseURL: "http://localhost:8080/web-demo",timeout: 1000} ); export default api; …...

OpenEuler系统桌面终端设置字体

初始界面 终端的字体间距过大&#xff0c;阅读起来不方便。 调整终端字体 点击菜单&#xff0c;选择“配置文件首选项” 未命名 ---- 文本---- 勾选 自定义字体 ---- 选择 "DejaVu LGC Sans Mono"字体 你也可以根据自己的喜好&#xff0c;选择其他字体。 修改好了…...

repo常用命令解析(持续更新)

1 同步 1.1 将本地仓库更新到最新状态。它会从远程服务器下载最新的代码&#xff0c;并将本地仓库与之同步。如果本地仓库中已经存在某个项目&#xff0c;repo sync会自动检测本地仓库中该项目的版本&#xff0c;并将其更新到最新状态。 类似于git fetch和git merge命令组合使…...

关于小红书商单变现的一些答疑

AI小红书商单训练营也过去1个月了&#xff0c;今天给大家汇总几个常遇到的问题&#xff0c;希望对大家在运营过程中有所帮助。 1.账号封面是否要统一模版&#xff1f; 为了让账号主页呈现整洁美观的效果&#xff0c;建议统一封面设计&#xff0c;视频开头可以设置一个固定画面…...

使用 Kubernetes Agent Server 实现 GitOps

目录 温习 GitOps 极狐GitLab Kubernetes Agent 极狐GitLab GitOps workflow 极狐GitLab KAS 的配置 创建极狐GitLab agent 创建 agent token Kubernetes 上安装 agent&#xff08;agentk&#xff09; 极狐GitLab GitOps workflow 实践 写在最后 温习 GitOps GitOps …...

Day12 qt QMianWindow,资源文件,对话框,布局方式,常用ui控件

QMianWindow 概述 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff08; menu bar &#xff09;、多 个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar) 及 一个中心部件 (central widget) 许多应用程序的基础…...

Python实现广义线性回归模型(statsmodels GLM算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义线性模型(Generalized Linear Model&#xff0c;简称GLM)是一种广泛应用于回归分析和分类问题的统…...

GNSEC 2022年第8届全球下一代软件工程线上峰会-核心PPT资料下载

一、峰会简介 新一代软件工程是指利用新的理论、方法和技术&#xff0c;在软件开发、部署、运维等过程中&#xff0c;实现软件的可控、可预测、可维护的软件生产方式。它涵盖了多个领域&#xff0c;如软件开发、测试、部署、运维等&#xff0c;旨在提高软件生产效率和质量。 …...

nVisual能为数据中心解决什么问题?

nVisual通过可视化的管理方式&#xff0c;使数据中心管理者能够有效且高效地管理数据中心的资产、线缆、容量、变更&#xff1b;使数据中心管理者能够获得如下问题的答案&#xff0c;以便能够快速做出更好、更明智的决策&#xff1a; 1&#xff0e;资产管理 我们有什么&#x…...

Android--Jetpack--Databinding详解

不经一番寒彻骨&#xff0c;怎得梅花扑鼻香 一&#xff0c;定义 DataBinding, 又名数据绑定&#xff0c;是Android开发中非常重要的基础技术&#xff0c;它可以将UI组件和数据模型连接起来&#xff0c;使得在数据模型发生变化时&#xff0c;UI组件自动更新。是 MVVM 模式在 An…...

Node.js入门指南(完结)

目录 接口 介绍 RESTful json-server 接口测试工具 会话控制 介绍 cookie session token 上一篇文章我们介绍了MongoDB&#xff0c;这一篇文章是Node.js入门指南的最后一篇啦&#xff01;主要介绍接口以及会话控制。 接口 介绍 接口是前后端通信的桥梁 &#xff0…...

MySQL和Java通用加密解密方式

加密方式使用 AES 加密&#xff0c;再转成 Base64。 SQL -- 加密 update your_table set your_columnto_base64(aes_encrypt(your_column, "password"));-- 解密 select aes_decrypt(from_base64(your_column) ,"password") from your_table; 使用原生 …...

若依前端APP版使用教程

1 增加页面流程 新增Page>新增API>新增组件>新增样式>新增路径(page.json) {"path": "pages/mes/pro/feedback/index","style": {"navigationBarTitleText": "工单报工"}} <template><view class&quo…...

2023 年工程师不可错过的 AI 主要发展趋势

从对未来的好奇到关键的企业工具&#xff0c;人工智能的发展证明了它对工程师的价值。不久前&#xff0c;Gartner 预测&#xff0c;采用人工智能工程实践来构建和管理自适应人工智能系统的企业&#xff0c;在实施人工智能模型方面的表现将优于同行至少 25%&#xff0c;这为各组…...

记录 | 安装地平线工具链install_ai_toolchain.sh出现cython版本问题报错解决

安装地平线工具链 install_ai_toolchain.sh&#xff1a; cd ddk/package/host/ai_toolchain bash install_ai_toolchain.sh出现报错&#xff1a; Requirement already satisfied: packaging>20.0 in /root/.local/lib/python3.8/site-packages (from matplotlib>2.1.0-…...

3步掌握B站视频转文字神器:为什么你需要这个效率提升10倍的工具

3步掌握B站视频转文字神器&#xff1a;为什么你需要这个效率提升10倍的工具 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 你是否曾经为了整理一个精彩的B站…...

CA-IS3741:四通道高速数字隔离芯片的选型、实测与光耦替代实战

1. 为什么需要高速数字隔离芯片&#xff1f; 在工业自动化、医疗设备、新能源等领域的电子系统中&#xff0c;不同模块之间经常需要进行电气隔离。传统的光耦器件&#xff08;如PC817、TLP521等&#xff09;虽然成本低廉&#xff0c;但在高速信号传输场景下暴露出明显短板。我曾…...

BFloat16指令集与矩阵乘法优化技术详解

1. BFloat16指令集概述BFloat16&#xff08;Brain Floating Point 16&#xff09;是Google Brain团队提出的一种16位浮点格式&#xff0c;专为深度学习应用优化。这种格式保留了与IEEE 754单精度浮点数&#xff08;FP32&#xff09;相同的8位指数位&#xff0c;但将尾数位从23位…...

XUnity自动翻译器:终极Unity游戏语言障碍解决方案指南

XUnity自动翻译器&#xff1a;终极Unity游戏语言障碍解决方案指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言不通而错过优秀的Unity游戏&#xff1f;是否在日文RPG、韩文视觉小说…...

基于红外传感器与CircuitPython的互动声光糖果碗制作指南

1. 项目概述&#xff1a;一个会“尖叫”的互动糖果碗又到了捣鼓点有趣玩意儿的时候了。作为一个喜欢在万圣节搞点小惊喜的创客&#xff0c;我总觉得光是发糖有点平淡。能不能让糖果碗自己“活”过来&#xff0c;在孩子们伸手时&#xff0c;用灯光和声音制造一点既有趣又不会太过…...

算力基石:CPU、GPU与嵌入式AI的技术逻辑与融合发展

在人工智能全面普及的时代&#xff0c;算力已经成为数字产业发展的核心驱动力。从日常使用的智能手机、家用电脑&#xff0c;到云端大模型、智能汽车、工业传感设备&#xff0c;各类智能终端的运转都离不开处理器的算力支撑。其中&#xff0c;CPU作为通用计算核心、GPU作为并行…...

2026年八大上门服务预约小程序:解锁高效生活新体验

本文围绕上门服务预约小程序展开系统性梳理&#xff0c;聚焦2026年市场上主流的八家服务商&#xff0c;包括好赞科技、厦门亿点通科技、福州启帆数字科技等。内容覆盖核心功能解析、场景适配性、用户体验及服务效率等关键维度&#xff0c;旨在帮助用户理解不同平台的差异化优势…...

告别硬编码延时!用Vector CAPL定时器实现汽车总线报文精准周期发送

告别硬编码延时&#xff01;用Vector CAPL定时器实现汽车总线报文精准周期发送 在汽车电子测试领域&#xff0c;CAN、LIN等总线报文的周期发送是验证ECU功能的基础需求。传统脚本常依赖delay()或硬编码等待&#xff0c;不仅难以维护&#xff0c;更会因系统调度导致时序漂移。本…...

别再乱写RS485协议了!基于STM32F103C8T6,聊聊工业通讯中帧结构的那些坑

工业级RS485通讯协议设计&#xff1a;从基础到实战的避坑指南 在嘈杂的工厂车间里&#xff0c;一排STM32F103C8T6控制器通过RS485总线连接着二十多台设备。突然&#xff0c;3号节点的温度传感器数据开始随机跳变&#xff0c;而工程师小王发现每当隔壁车间的变频器启动时&#x…...

告别单调按钮!用LVGL的imgbtn打造高颜值嵌入式UI(附9宫格切图技巧)

告别单调按钮&#xff01;用LVGL的imgbtn打造高颜值嵌入式UI&#xff08;附9宫格切图技巧&#xff09; 在嵌入式设备开发中&#xff0c;用户界面的美观度往往被忽视&#xff0c;开发者更关注功能实现而非视觉体验。然而&#xff0c;随着智能家居、可穿戴设备和工业控制面板的普…...