自定义浮点数计算方法

JS的浮点数计算精度丢失问题解决方案 近期在做项目的时候,遇到了一些JS浮点数精度的问题。这个问题,其实说大不大,说小不小。但是这次因为涉及到一些财务和结算的问题,然后突然发现这个小问题处理起来还是挺麻烦的。这里把相关的原因的问题的解决方案整理一下,也希望给各位提供一些参考。 阅读详情
// 0.1+0.2
function numAdd(num1, num2) {
    num1 = num1.toString();
    num2 = num2.toString();
    var num1Arr = num1.split(".");
    var num2Arr = num2.split(".");
    // 获取小数点后面的位数
    var num1Decimal = num1Arr[1];
    var num2Decimal = num2Arr[1];
    var maxLength = Math.max(num1Decimal.length, num2Decimal.length);
    // 补齐小数点后面的位数
    num1Arr[1] = num1Arr[1].padEnd(maxLength, "0");
    num2Arr[1] = num2Arr[1].padEnd(maxLength, "0");
    // 计算整数部分
    var resultInt = parseInt(num1Arr[0]) + parseInt(num2Arr[0]);
    // 计算小数部分
    var resultDecimal = "";
    var carry = 0;
    for (var i = maxLength - 1; i >= 0; i--) {
        var sum = parseInt(num1Arr[1][i]) + parseInt(num2Arr[1][i]) + carry;
        resultDecimal = sum % 10 + resultDecimal;
        carry = Math.floor(sum / 10);
    }
    if (carry > 0) {
        resultDecimal = carry + resultDecimal;
    }
    let resultDecimal0 = 0;
    if (resultDecimal.length > maxLength) {
        // 超出长度
        let gtNum = resultDecimal.length - maxLength;
        resultDecimal0 = resultDecimal.slice(0, gtNum);
        resultDecimal = resultDecimal.slice(gtNum);
    }
    if(resultDecimal0 > 0){resultInt += parseInt(resultDecimal0)}
    // 合并整数和小数部分
    if (resultDecimal === "") {
        return resultInt.toString();
    } else {
        return resultInt.toString() + "." + resultDecimal;
    }
}
console.log(numAdd(93.65, 54.72)); // 0.30000000000000004
python - 浮点数的存储结构 一笔笔教你怎么算 浮点数的表示 import struct while 1: try:a=float(input("输入一个数,他会输出对应的浮点数结构,输入非数类退出:")) except:break else: print(''.join(bin(h).replace('0b','').rjust(8,'0') for h in struct.pack('!f',a))) 我看到大大们的文章,喜欢用自定义方法来对某些函数加深认识,但是为什么浮点运算解释都那么模糊呢? 我看懂浮点运 阅读详情

相关推荐

自定义浮点格式在FPGA中的应用

例如,在机器学习模型训练中,需要进行大量的矩阵运算,而这些运算需要高精度的数字来确保计算结果的准确性。而自定义浮点数据格式在FPGA中的应用,则可以为特定场景下的计算提供高效、精确且灵活的解决方案。在上述代码中,我们使用了自定义的浮点格式来表示加数a、b和和c。这个浮点格式使得我们可以使用更少的位数来表示一个浮点数,而且可以通过调整指数和尾数的位数,来适应不同的场景需求。以8位自定义浮点数据格式为例,它可以被表示为一个3-3-2的结构:第一个3位表示指数、中间的3位表示尾数、最后的2位表示符号。

pytorchCode的博客 186

自定义浮点数类(分数形式)

我们可以通过自定义分数类,来解决浮点数数字不准确的问题。   class Rational{ private long _a;//分子 private long _b;//分母 public Rational() { _a=1; _b=1; } //最大公约数 private static long _gcd(long x, long y) { if (x&...

xckkcxxck的博客 854

5.6.1_浮点数的表示

计算机组成原理之浮点数的表示

人生得意须尽欢 1123

c语言自定义浮点函数,C语言float

C语言float教程C语言float定义详解语法float varname = value;参数参数描述float定义 float 类型变量使用的类型。varname变量名。value可选,变量的初始值。说明使用 float 定义了一个 float 类型的变量 varname,并赋初值为 value。C语言float详解说明描述精度6 ~ 7 位小数字节数4格式化符%f说明C 语言的 float ...

weixin_42127748的博客 6725

别再手动算考勤了!教你用Python+企业微信API自动生成月度报表

本文介绍如何利用Python和企业微信API构建自动化考勤分析系统,实现从数据获取到可视化报表生成的全流程自动化。通过企业微信打卡接口获取数据,使用Pandas进行高效清洗和分析,并生成Excel和HTML格式的报表,大幅提升考勤统计效率。系统支持智能判定考勤状态,如迟到、早退等,并可通过定时任务实现月度自动化运行。

weixin_27875131的博客 290

从零实现Unitree Go2的SLAM建图与导航:手把手集成slam_toolbox和nav2(附Rviz2可视化配置)

本文详细指导如何在Unitree Go2四足机器人上集成slam_toolbox和nav2,实现SLAM建图与导航功能。从ROS2环境配置、雷达数据处理到slam_toolbox参数优化,再到nav2路径规划与Rviz2可视化调试,提供完整解决方案。特别适合机器人开发者快速掌握ROS2导航栈在Unitree Go2上的应用实践。

weixin_33737134的博客 1232

JS:数字运算精度bug解决方法(误差)

js中数字的运算(特别是浮点数)经常出现误差的解决办法

留白声的博客 1017

智能车数字图像处理算法入门及C语言实现

智能车图像的最最基本入门算法介绍及C语言实现,二值化 - 特征识别 - 补线 - 中心巡线 - 偏差曲率计算。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 5110

js浮点数计算

由于二进制精度影响,JS在计算浮点数时容易造成偏差,而这个问题在很多程序语言中都存在,所以部分程序语言专门提供了高精度函数,为的就是解决浮点数据计算。 JS 中貌似还没有出现这类函数库,因此在浮点数计算中,很容易出现精度问题,当然JS是弱类型语言,很多时候程序自己转类型因此不注意容易忽视,比如: 1 alert(0.57*100) ...

weixin_33973609的博客 131

团结引擎+OpenHarmony 2实战篇:从零构建鸿蒙应用开发环境

本文详细介绍了如何从零开始构建鸿蒙应用开发环境,重点讲解了团结引擎与OpenHarmony 2的实战配置步骤。内容包括DevEco Studio安装、OpenHarmony SDK配置、团结引擎集成及项目创建等关键环节,帮助开发者快速搭建高效的开发环境,提升鸿蒙应用开发效率。

weixin_29294395的博客 265

跨 Agent 语义沟通机制构建:共享知识图谱与语义对齐方法

在具身智能与多智能体系统协同日益复杂化的背景下,跨 Agent 的语义沟通能力成为任务完成效率和系统鲁棒性提升的关键技术路径。本文系统分析了当前业界在共享知识图谱、语义嵌入对齐、语义意图建模与跨模态语义通信协议设计方面的实践经验,深入讲解如何在 Habitat-MARL 与 Isaac-MARL 等平台中,基于实体-关系结构、语义分布表示与任务上下文,构建具备理解、共享、协作能力的多 Agent 语义系统。文章以工程实战为主,覆盖图谱构建、语义嵌入同步、对齐模型部署、通信接口集成等多个核心模块,结合真实应用

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1293

解决JS浮点数运算结果不精确的Bug

最近在做项目的时候,涉及到产品价格的计算,经常会出现JS浮点数精度问题,这个问题,对于财务管理系统的开发者来说,是个非常严重的问题(涉及到钱相关的问题都是严重的问题),这里把相关的原因和问题的解决方案整理一下,也希望给各位提供一些参考。 一. 常见例子 // 加法 0.1 + 0.2 = 0.30000000000000004 0.1 + 0.7 = 0.7999999999999999 0.2 + 0.4 = 0.6000000000000001 // 减法 0.3

weixin_42812634的博客 633

安卓手机强制清理数据恢复出厂设置后无法设置密码怎么办?(分享亲身经历的有效解决方案)

📱安卓手机强制清数据恢复出厂设置后,竟无法设置锁屏密码!本文将解析问题根源,分享亲测有效的解决方案,帮你快速摆脱困扰🎉

XiaoqiangClub的博客 242

JavaScript浮点运算,小数点精度

math.js // JavaScript Document //数学函数 // 浮点数加法运算 function floatAdd(arg1, arg2) { var r1, r2, m; try{ r1 = arg1.toString().split(".")[1].length; } catch(e) { r1 = 0; } try { r2 = arg2.toSt...

w18478272407的博客 349

Claude Code 100个真实案例 - 用AI做数据可视化大屏(ECharts+实时数据)

数据报表看着枯燥?领导汇报缺少视觉冲击力?是时候做一个酷炫的数据可视化大屏了!本案例将用 Claude Code 从零搭建一个实时数据可视化大屏,使用 ECharts 实现折线图、柱状图、饼图、地图、仪表盘等多种图表,配合 WebSocket 实现秒级数据刷新,深色主题科技感拉满!

yueyeguzhuo的专栏 197

YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度

ASF-YOLO是一种基于YOLO的新颖框架,结合了空间和尺度特征以实现准确和快速的分割。其中,注意力尺度序列融合模块。

Limiiiing的博客 4391

JS四则运算与四舍五入精度问题及解决方案

一、Javascript精度问题业务背景 JS中 0.1+0.2 = 0.3000000000000004的问题,在很多业务场景里都是一个令人头痛的问题。尤其是在大型的电商企业,货币基金股票行业的网页...

qq_37555524的博客 1153

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数据存储(超全,超详细,零基础也都学的会)

1、基本的内置类型: 2、类型的基本归类: (1)整形家族: 有符号和无符号的区别在下文中有提到。 (2)浮点型家族: (3)自定义类型 (4)指针类型: (5)空类型: 通常用于表示函数返回值,函数参数,指针类型(如 void Print(void)) 3、整形在内存中的存储 (1)整形有原码,反码和补码三种由二进制表示的形式。 (2)整形数据在内存中是以补码形式存放。 整形中有符号和无符号的存储有什么不同? <1> 有符号...

yakiyakiya的博客 2659

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Zabbix配置监控和图形

配置监控 可以对单个主机配置监控项也可以设置成模版直接关联,具体看需要。 对单个主机配置监控项 创建一个主机 自定义一个监控项 常用的监控方式类型 zabbix agent:被动模式, zabbix agent(active):主动模式 ipmi ssh jmx telnet 数据类型: 整数 浮点数 字符串 log text 存储的值: AS is:不对数据进行处理,存储采集...

十五十六 9925

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JavaScript前端页面计算结果,后面会有很多零解决方法

JavaScript前端页面计算结果,后面会有很多零解决方法。

hyx153183740的博客 3752

js小数计算小数点后显示多位小数

首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum() { var num = 22.77; alert(num + 10); } 复制代码 点击Show按钮 结果显示32.769999999996 出现了N多小数. 也并不是所有数字都会出现这种现象, 除了 22.99  2.

小小程序猿进阶之路 3647

程序员必看题(更新中)

程序员必看题(更新中)char类型是否能保存一个汉字float num = 3.14159是否正确 char类型是否能保存一个汉字 答:可以保存一个汉字, —计算机数据存储以字节为单位的 ,通常一个字节=1kb=1024 byte 每个字节的取值范围是-128~127之间 可以保存一个字母/英文字符/数字/ 由于中文字符比较多 所以用两个字节来保存 同时char是 16位(梁字节)刚好可以保存一个 汉字 float num = 3.14159是否正确 答:不正确,因为Java默认的浮点数类型是doub

weixin_45933638的博客 891

MatLab库函数

目录前言用户自定义函数生成矩阵的函数生成特殊值的矩阵生成所有元素均为无穷大的矩阵 inf生成全零矩阵 zeros生成全一矩阵 ones生成指定值的矩阵生成对角阵 diag快捷功能返回矩阵维度 size求和 sum浮点数表示范围最大正浮点数 realmax最小正浮点数 realmin逻辑函数矩阵所有元素与 all矩阵所有元素或 any矩阵标量异或 xor随机数以向量形式返回当前日期和时间 clock控制随机数生成 rng生成(0, 1)内均匀分布的随机浮点数 rand生成指定范围内均匀分布的随机整数 rand

m0_55464171的博客 1499

JavaScript--运算确保精度--自定义toFixed方法,乘除法计算方法优化

首先是toFixed方法,原本的方法有一些误差,小数点部分不是真正的四舍五入 重写一下: const toFixed = function (myNum,s) { // Math.pow(10, s) =>10的s次方 // Math.round=>整数后面的第一个小数数字四舍五入=>例如0.0055501*10^2=>0.5xxx=>1 // 1/100=>0.01 myNum = (Math.round(myNum * Math.pow(10,

qq_42750608的博客 713

解决js中浮点数(小数)计算不准确问题

1. 原因     js计算最终也是通过计算机进行计算,而计算机只能识别二进制的0和1,也就是说我们所写的计算都必须转成二进制数才能进行计算,然而有些小数转成二进制数的时候除不尽,出现无限小数位,这时候就只能取近似值进行计算,导致了我们所遇到的不准确的问题。 2. 解决方案     解决思路: 我们可以把需要进行计算的小数转成整数进行计算,然后在变成小数     可以像我这样写一个工具方法...

技术之路 1万+
上一篇: springboot项目实现导出excel动态设置表头
下一篇: npm使用淘宝镜像ssl证书过期问题
if时光重来
博客等级 码龄8年 248粉丝 217原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值