【小程序】解决浮点数精度损失问题

16 篇文章 0 订阅
订阅专栏
11 篇文章 0 订阅
订阅专栏

最近在做开发的时候出现了老生常谈的问题:浮点数精度损失。只不过之前是Python环境下的,如今是JS环境。
举几个🌰

> 0.1 + 0.2
0.30000000000000004

> 0.3 - 0.2
0.09999999999999998

> 0.8 * 3
2.4000000000000004

> 0.3 / 0.1
2.9999999999999996

在Python环境下,我们可以使用默认的库decimal来完成精确计算

>>> from decimal import Decimal
>>> float(Decimal('0.1') + Decimal('0.2'))
0.3

但是js环境呢?查了一下,js自身没有decimal这样的库,查了一下,有博文说可以先将浮点数扩大至整数,计算完后再缩小至浮点数

> (0.1 * 10 + 0.2 * 10) / 10

但是!,实际情况是有特例!!!!

> 35.41 * 100
3540.9999999999995

所以这样并不能解决问题

经过一番查找,通过第三方的库可以解决问题

分别介绍一下:

math.js

安装

npm
>>> npm install mathjs
源码

https://cdnjs.cloudflare.com/ajax/libs/mathjs/11.2.1/math.min.js

nodejs中使用

> const math = require('mathjs')
> Number(math.add(math.bignumber(0.1),math.bignumber(0.2)))
0.3

小程序中使用

由于实际使用后发现,在小程序中使用npm方式安装mathjs后构建npm会报错,故不推荐使用该方式安装mathjs

const Math = require("../../utils/math.min.js")

Page({
  onLoad() {
    console.log(Number(Math.add(Math.bignumber(0.1), Math.bignumber(0.2))));
})

decimal.js

安装

npm
>>> npm install decimal.js
源码

https://cdnjs.com/libraries/decimal.js

nodejs中使用
> const Decimal = require('decimal.js')
> Decimal(0.1).plus(Decimal(0.2)).toNumber()
0.3
小程序中使用
const Decimal = require("decimal.js")

Page({
  onLoad() {
    console.log(Decimal(0.1).plus(Decimal(0.2)).toNumber());
})
const Decimal = require("../../utils/decimal.js")

Page({
  onLoad() {
    console.log(Decimal(0.1).plus(Decimal(0.2)).toNumber());
})

number-precision

安装

npm
>>> npm install number-precision
源码

没有找到单文件源码

nodejs中使用
> const NP = require('number-precision')
> NP.plus(0.1, 0.2)
0.3
小程序中使用
const NP = require('number-precision')

Page({
  onLoad() {
    console.log(NP.plus(0.1, 0.2));
})

在这里插入图片描述
对比一下mathjs和decimaljs的源代码文件大小
在这里插入图片描述
对比一下npm安装的decimaljs与number-precision文件大小
在这里插入图片描述
所以,如果需要大量的科学计算功能,建议使用mathjs,如果仅对加减乘除进行精确计算则建议number-precision,因为总共加起来也就13KB,比最大的mathjs的696KB减少了50多倍

微信小程序在wxml页面将数值保留小数后几位
m0_56860190的博客
03-09 907
微信小程序前端页面将数值保留小数点后一位和两位
精度&双精度浮点数与十六进制数相互转换
04-10
在进行单精度和双精度浮点数与十六进制转换时,需要注意的是,由于浮点数的存储方式涉及舍入误差,转换过程中可能会导致微小的精度损失。此外,不是所有的十六进制数都能准确表示为浮点数,特别是对于超出浮点数范围...
decimal.JS 的使用
2201_75705263的博客
07-06 1183
题记:02+0.1 == 0.3?显然我们需要处理一下才行,那就让decimal.js登场;
微信小程序前端精度丢失
weixin_52710755的博客
04-18 629
微信小程序前端精度丢失原因与解决方案
decimal.js 项目教程
gitblog_00644的博客
08-08 735
decimal.js 项目教程 decimal.jsAn arbitrary-precision Decimal type for JavaScript项目地址:https://gitcode.com/gh_mirrors/de/decimal.js 1. 项目的目录结构及介绍 decimal.js 项目的目录结构相对简单,主要包含以下文件和目录: decimal.js/ ├── CHANGEL...
小程序中的小数计算问题/浮点数计算问题
weixin_33840661的博客
10-15 5402
2019独角兽企业重金招聘Python工程师标准>>> ...
小程序丢失精准度问题
qq_36697090的博客
04-28 1416
小程序页面js中的丢失精准度问题的两种解决方式,一种,可以考虑用 数字.toFixed(n)//保留几位小数,这种有误差,再一种,bigdecimal.js。 后台服务就很好处理了 ...
微信小程序中数值计算的精度丢失问题
最新发布
Xiang_Gong_Ya_的博客
09-10 543
微信小程序中,当你遇到数值计算的精度丢失问题时,主要是因为 JavaScript 在处理浮点数时存在固有的精度问题。这是因为计算机内部使用二进制形式存储数字,而某些十进制小数在二进制中无法精确表示,从而导致了精度误差。
小程序中关于js数字精度丢失的解决办法
weixin_43923808的博客
08-04 1454
我在utils文件夹下新建public_fun.js一个作为公用文件。解决方式:把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)public_fun.js内容如下。在需要用到的页面导入。
C语言中浮点数精度问题分析.pdf
09-19
在C语言编程中,浮点数精度问题是一个常见的问题,它涉及到计算机科学基础中的数值表示方法。由于计算机采用二进制系统存储数据,这使得计算机在处理十进制小数时会出现精度误差。理解这些误差产生的原因是极为重要...
C++数据精度问题(对浮点数保存指定位小数)
08-29
总之,C++中的浮点数精度问题可以通过`sstream`和`iomanip`库提供的工具来解决,但需要注意浮点数的二进制表示带来的精度损失和可能的四舍五入误差。在设计和使用相关函数时,应充分考虑这些因素,并进行详尽的测试...
weChatBigNumber:  微信小程序的大数运算库,支持多进制,大数加减乘除取余和随机数计算
05-01
这是一个十分轻量级的用于微信小程序的大数运算库 它的功能有: 2进制-32进制数运算 大整数加(正负均可) 大整数减(正负均可) 大整数乘(正负均可) 大整数除(正负均可,得出的结果为整数,抹去小数部分) 大整数取余(得出的结果恒为正数) 大整数随机数生成 使用方法: 首先把下载好的weChatBigNumber.js文件放入微信小程序的 项目根目录/utils 文件夹下。 之后在需要的页面添加此语句: var bigNum = require('../../utils/weChatBigNumber.js') 然后调整进制: 在weChatBigNumber.js文件中,有一个名为radix的用十进制表示的变量。我们通过修改它的值,来达到更改进制的目的。 var radix = 16; 之后就可以调用大数运算库中的方法了: 函数 实例 说明 add(x,y) bigNum.add(x,y
微信小程序 保留小数(toFixed)详细介绍
09-01
主要介绍了 微信小程序 保留小数(toFixed)详细介绍的相关资料,这里附有实例,帮助大家学习参考此部分知识,需要的朋友可以参考下
S7-200SMART 64位浮点数转32位浮点数(源文件+库文件+程序注释).rar
01-11
这个过程涉及到浮点数的表示方式、数据类型的转换以及可能的精度损失问题。 64位浮点数,也称为双精度浮点数(Double Precision Floating Point),遵循IEEE 754标准,它由32位的指数部分、11位的隐藏位和52位的...
labview十六进制转浮点数程序
05-14
在实际应用中,这样的程序可能还需要考虑到数据的精度损失,尤其是在截取二进制位时。此外,为了保证与下位机通信的正确性,可能还需要考虑到字节序(大端或小端)的问题。 总之,“十六进制转浮点数.vi”是LabVIEW...
微信小程序浮点数相加值不对
weixin_48578764的博客
07-21 281
微信小程序的分数相加减值不正确,下面例子的s值为0.019999999999999997。可以计算中将其*100,在页面显示时/100即可。
微信小程序有关用户输入浮点数的限制
Z52863339的博客
11-04 393
微信小程序有关用户输入浮点数的限制。
一个小程序笔记-java中浮点型细节
滴滴的专栏
12-21 408
public class day01_01 {   public static void main(String[] args) { double da = 9.1234567890123456789; double db = 9; float  dc = 9.123456789f; //  float  dd = 9.1;          //ERROR:丢失精度,不能自动转换。
decimal.js的简单使用
星期Ⅷ
07-19 3780
node.js npm install --save decimal.js var Decimal = require(‘decimal.js’); ES6 import {Decimal} from ‘decimal.js’; 加减乘除 const a = 9.99; const b = 8.03; // 加法 let c = new Decimal(a).add(new Decimal(b)) // 减法 let d = new Decimal(a)
写文章

热门文章

  • 【OSS】【Py】OSS出现The specified key does not exist问题 35043
  • 关于Python函数中变量报错UnboundLocalError: local variable referenced before assignment 33829
  • numpy中的argpartition用法 31476
  • 漂亮的终端:zsh+zim+powerlevel10k+nerd font 22082
  • 解决tqdm在jupyter中报错ImportError: IProgress not found. Please update jupyter and ipywidgets. 20387

分类专栏

  • Linux 5篇
  • 未解之谜 15篇
  • Flask 10篇
  • Swagger/OpenAPI 7篇
  • 不定时更新 18篇
  • 运维 44篇
  • Docker 32篇
  • Git 6篇
  • kafka 1篇
  • JavaScript 16篇
  • 小程序 11篇
  • NGINX 10篇
  • Postman 3篇
  • MongoDB 14篇
  • Sentry 9篇
  • Pandas 11篇
  • VIM 3篇
  • SQL 6篇
  • 异步编程 7篇
  • SQLAlchemy 3篇
  • Cython 3篇
  • 生活 1篇
  • 翻译 1篇
  • PostgreSQL 2篇
  • 算法 3篇
  • 音频开发 4篇
  • 数据可视化 4篇
  • DevOps 3篇
  • Shell 1篇
  • Numpy 1篇
  • 测试 9篇
  • ELK 1篇
  • APM 2篇
  • 大数据 12篇
  • 架构 4篇
  • Go 9篇
  • 面向对象 2篇
  • 思维导图 2篇
  • NLP 1篇
  • PyQT5 3篇
  • 深度学习 23篇
  • Ubuntu+Python上位机 5篇
  • Python CAN上位机 4篇
  • 工具 123篇
  • 树莓派 21篇
  • 前端 13篇
  • 数据处理 57篇
  • 后端 44篇
  • Python 180篇
  • 爬虫 16篇

最新评论

  • Mac卸载Pandoc

    作业不能白做: 直接复制保存在一个txt文件里,然后连同.txt重命名为perl uninstall-pandoc.pl,在这个pl文件目录下进入终端并运行

  • 【OSS】【Py】OSS出现The specified key does not exist问题

    2401_83443101: 送我一个皮肤吧官方

  • 解决tqdm在jupyter中报错ImportError: IProgress not found. Please update jupyter and ipywidgets.

    GrowingBrain: 安装后需要重启 kernel 才会生效。

  • 【ChatGPT】基于WSL+Docker的ChatGPT PLUS共享服务部署

    TheGreatCaaat: 请问需要授权的插件无法授权,这个问题能解决吗表情包

  • 【ChatGPT】基于WSL+Docker的ChatGPT PLUS共享服务部署

    TheGreatCaaat: 这样的账号遇到一些需要授权的插件在点击授权后就跳到chatgpt官网了,请问这个有解决方法吗表情包

最新文章

  • 【wsl2】WIN11借助wsl2挂载ext4磁盘
  • 【MySQL】如果表被锁可以尝试看一下事务
  • 【ArcGIS】下级边界融合,只保留上级边界
2024年3篇
2023年12篇
2022年69篇
2021年131篇
2020年143篇
2019年52篇
2018年12篇
2017年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司婚纱摄影网站优化公司怎样优化网站乱代码视频网站优化建议奉新县网站seo优化排名淄博网站制作服务优化网站建设完成优化郴州网站优化电话枝江seo网站优化连云港市网站公告优化如何都江堰营销型网站优化登封网站自然优化新能源网站优化的效果广州网站的优化黄石品牌网站优化要多少钱网站外部优化思路南宁网站优化推广公司排名寻甸网站优化运营教育网站优化查询上海做网站优化公司手机网站如何优化网站seo分析及优化建议安徽诚信服务企业网站优化网站快速优化排名费用优化软件 网站宁波网站关键词优化代码滕州网站如何做优化贾汪区网站优化与推广西安网站关键词优化方式铁岭网站推广与优化有什么方法石家庄快速优化网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化