js toFixed函数精度问题

news2024/11/28 6:31:19

在使用toFixed函数会出现精度缺失问题,如下图
在这里插入图片描述
在2.55与1.45保留1位小数时,正常情况下应该为2.6与1.5,而toFixed函数得出的是2.5与1.4。这和计算机中小数存储有关。
小数运算不精确其实与下面三方面有关:

1、存储
2、运算
3、显示

其实这三个方面都不精确。

存储

计算机中其实没有办法存储一个精确的小数,如下

0.2.toString(2);
// 结果
'0.001100110011001100110011001100110011001100110011001101'

0.2通过toString转化为二进制,如上,其实这是一个无线循环的小数,但是计算机不能存储无限小数,它就会截取,但是这个截取也不是简单的截取,所以最终存储的数据就会出现有大有小的情况。比如通过toPrecision函数确定精度。

0.2.toPrecision(30);
// 结果
'0.200000000000000011102230246252'
0.3.toPrecision(30);
// 结果
'0.299999999999999988897769753748'

它实际得到的是一个比0.2大的数据,而0.3得到的是一个小于本身的数据。

运算

运算有可能精确,也有可能更不精确,比如

0.2 + 0.3 = 0.5

因为0.2存储的时候稍微大一些,0.3存储的时候稍微小一些,但是两个相加,进位抵消变为精确的数据,但是0.2 - 0.3 得到的就不是一个精确的数据。

0.3 - 0.2 = 0.09999999998
显示

显示的时候做了近似处理,当输入0.20000000000000000001110,计算机显示的是0.2,当输入0.199999999999999999999显示的也是0.2,对于计算机而言0.20000000000000000001110 === 0.199999999999999999999是成立的。
在这里插入图片描述
所以toFixed函数不精确主要是存储截取的不精确和运算的不精确。
针对这个问题,可以采用第三方插件库,比如decimal.js,核心计算逻辑是将数字转成字符串,在进行一位一位的运算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1448400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新项目,从0到1,SpringBoot+Vue.js权限管理系统,拿去做毕设

大家好,我是 jonssonyan 最近把以前做的权限管理系统重新整理了一下(将一些不规范的地方规范了一下,并且在关键地方写了注释),代码全部开源,这个项目是以现在主流的前后端分离模式开发的,包含前…

课时27:内容格式化_输入格式化_EOF原理

3.2.1 EOF原理 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 场景需求 在运维岗位中,有非常多的场景需要我们在脚本中编写应用软件的配置文件。在这些应用软件的配置文件中,经常携带大量的格式&#xff0…

猫头虎分享已解决Bug || SyntaxError: Unexpected token o in JSON at position 1 ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Docker 镜像是什么?常用的镜像命令有哪些?

docker 镜像仓库相关的命令:Docker 镜像仓库是什么?有哪些镜像仓库命令?-CSDN博客 1. Docker 镜像 Docker 镜像是一个轻量级、独立、可执行的软件包,它包含了运行特定应用程序所需的所有内容:代码、运行时环境、系统工…

[计算机网络]---网络编程套接字

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、基础知识…

Web基础01-HTML+CSS

目录 一、HTML 1.概述 2.html结构解析 3.HTML标签分类 4.HTML标签关系 5.HTML空元素 6.HTML属性 7.常用标签 (1)HTML标签 (2)标题标签 (3)换/折行标签 (4)段落标签 &am…

Qt之条件变量QWaitCondition详解

QWaitCondition内部实现结构图: 相关系列文章 C之Pimpl惯用法 目录 1.简介 2.示例 2.1.全局配置 2.2.生产者Producer 2.3.消费者Consumer 2.4.测试例子 3.原理分析 3.1.辅助函数CreateEvent 3.2.辅助函数WaitForSingleObject 3.3.QWaitConditionEvent …

java客运管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java客运管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&#…

国产制造,欧美品质:爱可声助听器产品质量获国际认可

随着科技的发展和全球化的推进,越来越多的中国制造产品开始走向世界舞台。其中,爱可声助听器凭借其卓越的产品质量,成为了国产制造的骄傲。 国产制造指的是在中国境内生产的产品,欧美品质则是指产品在设计、生产、质量控制等方面…

不止于浏览器:掌握Node.js,开启全栈开发新篇章!

介绍:Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,特别适合构建高性能的网络服务器和实时应用。具体介绍如下: 服务器端JavaScript:Node.js的核心优势之一是在服务器端运行JavaScript,这使得前端开发者可以…

KAJIMA CORPORATION CONTEST 2024(AtCoder Beginner Contest 340)ABCDEF 视频讲解

这场比较郁闷,C题短路,连续4次WA,导致罚时太多 A - Arithmetic Progression Problem Statement Print an arithmetic sequence with first term A A A, last term B B B, and common difference D D D. You are only given inputs for w…

【论文模型讲解】CLIP(Learning Transferable Visual Models From Natural Language Supervision)

文章目录 前言0 摘要1 Introduction and Motivating Work2 Approach2.0 模型整体结构2.1 数据集2.2 选择一种高效的预训练方法2.3 模型选择与缩放2.4 训练 3 实验3.1 zero-shot 迁移3.1.1 与 Visual N-grams 对比3.1.2 Prompt Engineering and Ensembling3.1.3 zero-shot CLIP …

【数据结构】哈希桶封装出map和set

利用之前的哈希桶封装出unordered_map和unordered_set。 这个封装并不简单,迭代器的使用,模板参数的繁多,需要我们一层一层封装。 map是一个k - v类型,set是k类型,那么就明确了如果需要封装,底层的tables…

产品经理面试题解析:业务架构是通往成功的关键吗?

大家好,我是小米!今天我要和大家聊的是产品经理面试中的一个热门话题:“业务架构”!相信不少小伙伴在准备面试的时候都会遇到这个问题,究竟什么是业务架构?它又与产品经理的工作有着怎样的关系呢&#xff1…

统计图饼图绘制方法(C语言)

统计图饼图绘制方法(C语言) 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制,饼图绘制较难。今值此介绍饼图的绘制方法。 本方法采用C语言的最基本功能: ( 1.&#xff09…

【AI视野·今日NLP 自然语言处理论文速览 第七十九期】Thu, 18 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 18 Jan 2024 Totally 35 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deciphering Textual Authenticity: A Generalized Strategy through the Lens of Large Language Semantics …

vue3+ts+vite+uniapp项目常见问题

vue3tsvite中""路径失效的问题 ""需要进行配置: 首先npm install types/node --save-dev(需要用到node其中的path)接着在vite.config.ts配置文件中进行配置: 引入 import path from ‘path’,然…

进阶C语言-动态内存管理

动态内存管理 🎈1.为什么存在动态内存分配🎈2.动态内存函数的介绍🔭2.1malloc和free函数🔭2.2calloc函数🔭2.3realloc函数 🎈3.常见的动态内存错误🔭3.1对NULL指针的解引用操作🔭3.2…

2024.2.9

作业1 请使用递归实现n&#xff01; #include<stdio.h> #include<string.h> #include<stdlib.h>int fun(int m) {if(m0)return 1;else{return m*fun(m-1);} } int main(int argc, const char *argv[]) {int m;printf("please enter m:");scanf(&…

TCP高频知识点

本篇文章主要讲述一下在面试过程中TCP的高频知识点 1.TCP三次握手流程图: 客户端发送一个SYN&#xff08;同步&#xff09;报文段给服务器&#xff0c;选择一个初始序列号&#xff0c;并设置SYN标志位为1。服务器接收到客户端的SYN报文段后&#xff0c;回复一个ACK&#xff08…