Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >订单系统除法精度缺失问题

订单系统除法精度缺失问题

作者头像
用户10384376
发布于 2023-02-25 12:48:39
发布于 2023-02-25 12:48:39
5660
举报
文章被收录于专栏:码出code码出code

在一个订单系统中,需要限制下单数量不能超过库存的百分比,比如一个商品库存是20吨,在配置单次不能大于库存的30%,解题思路是下单数/库存总数与配置做对比。但是除法运算可能会出现除不尽的情况,比如1/3= 0.3333333.....,对于除法需要保留小数点后的数字。当时我在计算的时候保留了两位小数,

  • 使用 (5.99/20 = 0.29) < 0.3,可以成功。
  • 使用 (6.01/20 = 0.30)= 0.3,这就有问题了。

问题原因

因为涉及到保留小数,6.01/20 = 0.3005,就转成了 0.30,所以就判断错误了。

解决方案一:小数位保留4位小数

如果和两位小数的做对比,相除的结果需要保留两倍的小数,也就是四位小数。

解决方案二:改成乘法运算。

方案一不足在于,需要根据对比数的小数点更新保留的小数位数,不是很通用。我们需要将除法改成乘法,因为程序不会涉及小数保留, 再回到订单系统的计算,库存是20吨,下单限制不能大于30%,所以每次下单数量不能大于 20 * 30% = 6,再将下单数和 6 比较即可。

总结

  • 除法需要保留精度,就会存在精度缺失,所以需要多保留几位小数。
  • 除法可以转成乘法,使用乘法后的结果做对比即可。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
10图详解:订单系统的设计
大家好,我是师长,欢迎大家先关注上面的面试题库公众号,跳槽跑路心不慌。今天我们来讲讲订单系统的设计。
java进阶架构师
2021/11/17
3.6K0
RocketMQ实战—3.基于RocketMQ升级订单系统架构
目前已经有了一套3台NameServer机器 + 6台Broker机器的生产集群,而且对集群的生产参数都进行了适当优化,足以抗下每秒十多万的消息请求。
东阳马生架构
2025/04/10
780
java保留两位小数
四舍五入   double   f   =   111231.5585;   BigDecimal   b   =   new   BigDecimal(f);   double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();   保留两位小数 ---------------------------------------------------------------
bear_fish
2018/09/19
6.4K0
RocketMQ实战—1.订单系统面临的技术挑战
2.订单系统面临的技术问题一:下订单的同时还要发券、发红包、Push推送等导致性能太差
东阳马生架构
2025/04/07
1300
Java精度问题
Java中的简单浮点数类型float和double不能够进行运算。 这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。 在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有。现在让我们看看如何解决这个问题。
用户1205080
2019/03/04
1.1K0
前端最轻量级的精度计算工具库!
今天和同事聊起计算机中精度的话题。于是想起一个小巧的,快速的JavaScript库:big.js。它可用于任意精度的十进制算术运算。这里分享给大家
程序员老鱼
2023/12/11
1.5K0
前端最轻量级的精度计算工具库!
BigDecimal计算的这些坑,让我的程序产生难以想象的Bug
通常我们在金融、科学等场景,会使用BigDecimal。然而如果我们不注意BigDecimal的精度问题,计算结果偏差可能会很大,最终会产生难以想象的Bug。
Lvshen
2022/05/05
8150
BigDecimal计算的这些坑,让我的程序产生难以想象的Bug
电商系统之订单系统
订单系统作为电商系统的“纽带”贯穿了整个电商系统的关键流程。其他模块都是围绕订单系统进行构建的。订单系统的演变也是随着电商平台的业务变化而逐渐演变进化着,接下来就和大家一起来解析电商平台的“生命纽带”。
纯洁的微笑
2018/09/26
3.5K0
0.3-0.2 = 0.09999999999999998 问题解析(精度缺失问题)
研究一下0.3 - 0.2 不等于0.1的问题,做前端时间久的人都避不开精度缺失的问题,今天我们就研究透他,关于0.3 - 0.2 = 0.09999999999999998 这个问题
何处锦绣不灰堆
2024/01/04
2280
丸辣!BigDecimal又踩坑了
小菜之前在国内的一家电商公司自研电商项目,在那个项目中是以人民币的分为最小单位使用Long来进行计算
菜菜的后端私房菜
2024/08/20
4330
学习PHP中的任意精度扩展函数
今天来学习的是关于数学方面的第一个扩展。对于数学操作来说,无非就是那些各种各样的数学运算,当然,整个程序软件的开发过程中,数学运算也是最基础最根本的东西之一。不管你是学得什么专业,到最后基本上都会要学习数据结构与算法,而算法其实就是研究的如何利用数学来优化各种排序和查找能力。PHP 在底层已经帮我们准备好了很多的数学计算函数,就让我们一一来学习吧。
硬核项目经理
2021/09/02
9630
Java开发中商业计算请务必使用BigDecimal来进行计算!
今天群里一个初级开发者问为什么测试人员测出来他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。这里小胖哥要提醒你,商业计算请务必使用`BigDecimal`,浮点做商业运算是不精确的。因为计算机无法使用二进制小数来精确描述我们程序中的十进制小数。《Effective Java》在第48条也推荐“使用BigDecimal来做精确运算”。今天我们就来总结归纳其相关的知识点。
码农小胖哥
2019/12/10
1.5K0
抓住数据的小尾巴 - JS 浮点数陷阱及解法 camsong
链接 | https://zhuanlan.zhihu.com/p/30703042
五月君
2019/10/29
2.5K0
抓住数据的小尾巴 - JS 浮点数陷阱及解法 camsong
JavaScript 浮点数陷阱及解法
众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004、1-0.9=0.09999999999999998,很多人知道这是浮点数误差问题,但具体就说不清楚了。本文帮你理清这背后的原理以及解决方案,还会向你解释JS中的大数危机和四则运算中会遇到的坑。
laixiangran
2018/10/22
1.8K0
JavaScript 浮点数陷阱及解法
美团团购订单系统优化记
团购订单系统简介 美团团购订单系统主要作用是支撑美团的团购业务,为上亿美团用户购买、消费提供服务保障。2015年初时,日订单量约400万~500万,同年七夕订单量达到800万。 目标 作为线上S级服务,稳定性的提升是我们不断的追求。尤其像七夕这类节日,高流量,高并发请求不断挑战着我们的系统。发现系统瓶颈,并有效地解决,使其能够稳定高效运行,为业务增长提供可靠保障是我们的目标。 优化思路 2015年初的订单系统,和团购其它系统如商品信息、促销活动、商家结算等强耦合在一起,约50多个研发同时在同一个代码库上开发
美团技术团队
2018/03/12
2K0
美团团购订单系统优化记
金融系统如果产生多余两位小数位的金额怎么办?
导读:为什么我们只看得到两位小数的余额呢,多出的小数位不也是钱吗,被省略吗?怎么省略的呢?
码农架构
2021/05/28
1.9K1
BigDecimal常用方法详解
​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。
不会飞的小鸟
2019/09/18
2.2K0
BigDecimal常用方法详解
写给供应链产品经理:浅谈订单系统的设计
订单管理是一个常见的管理问题,包含在企业的订单处理流程中。由于客户/用户下订单的方式多种多样、订单执行路径千变万化、产品和服务不断变化、发票开具难以协调,这些情况使得订单管理变得十分复杂。
物流IT圈
2019/08/09
4.4K0
BigDecimal加减乘除运算工具类
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137300.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
4530
利用BigDecimal类巧妙处理Double类型精度丢失
精度丢失的问题是在其他计算机语言中也都会出现,float和double类型的数据在执行二进制浮点运算的时候,并没有提供完全精确的结果。产生误差不在于数的大小,而是因为数的精度。
BUG弄潮儿
2021/01/05
2.4K0
相关推荐
10图详解:订单系统的设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档