首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    金额计算字段类型用Long,还是BigDecimal ?

    大家好,我是苏三,又跟大家见面了 前言 对于从事后端开发的小伙伴来说,可能会遇到金额计算字段的类型,到底该用Long,还是BigDecimal的困扰。...甚至有些公司的架构师跟DBA,有时也会为了金额计算字段的类型而PK。 今天这篇文章专门跟大家一起聊聊这个话题,希望对你会有所帮助。...一、案发现场 有些小伙伴在工作中可能遇到过这样的场景:新来的开发小明负责公司电商平台的优惠券计算功能。 按照产品需求,满100减20的优惠券,用户下单金额是98.5元时,应该无法使用这张优惠券。...计算机的二进制系统也无法精确表示某些十进制小数。 三、两种解决方案的深度PK 面对金额计算的精度问题,Java开发者主要有两种选择。 让我们深入剖析每种方案的实现和原理。...: 金额计算无小事,必须严格测试 选择适合业务的技术,而不是最新的技术 保持一致性,一个系统内不要混用多种方案 技术选型就像选工具,用对了事半功倍,用错了后患无穷。

    8310

    Excel公式练习76: 计算每年应还款金额

    本次的练习是:你借了一笔款,在某月开始还款,并且要在指定月数还完,每月还款固定金额,要求计算每年的还款金额。...图1 要求在单元格E4中输入公式,向右拖动,得到每年的还款金额。 先不看答案,自已动手试一试。...公式主要是使用IF语句来判断月数是否在要求还款的30个月之内,然后用当年对应的月数乘以每月还款金额,得到当年还款总额。...C$6,DATE(E3+1,1,1),"M"),12)*amount,IF(end>DATE(E3,1,1),DATEDIF(DATE(E3,1,1),end,"M")*amount,0)) 即,如果计算得出的月数小于还款要求的...30个月,则取计算出的月数与一年的月数12的最小值为当年应还款的月数,这主要是获取第1个的月份(因第一年还款月数未满12个月)。

    1.4K10

    SwiftUI:WeSplit项目 计算每个人的金额

    然后再次将其转换为Double,这样我们就可以保持所有精度——将其添加到前一行下面: let tipSelection = Double(tipPercentages[tipPercentage]) 我们需要计算的最后一个数字是他们账单的金额...这还需要三个步骤: 1、我们可以通过将orderAmount除以100并乘以tipSelection来计算tip值。 2、我们可以通过向orderAmount添加tip值来计算账单的总金额。...3、我们可以用总金额除以人数来计算出每人的金额。 一旦完成,我们可以返回每人的金额,我们就完成了。...在我们完成之前,我们要解决显示的一个小问题,这就是总价格的显示方式。...我们的金额计算使用了双精度,这意味着Swift给我们的精度比我们需要的要高得多——我们预计会看到25.50美元,但实际上是25.500000美元。

    2K20

    金融系统中正确的金额计算及存储方式

    昨天微信群里在讨论金额计算及存储的话题,今天特来结贴一下。 经典的精度丢失问题 Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面的示例。...怎么解决 在《Effective Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。....subtract(new BigDecimal(String.valueOf(feeAmount))); System.out.println(tradeAmount); } 总结 金额运算尽量使用...数据库存储金额,一般有整型和浮点型两种存储方式。如果是有汇率转换的,建议使用浮点数decimal进行存储,可以灵活的控制精度,decimal直接对应java类型BigDecimal。

    3K90

    Java工具类之——BigDecimal运算封装(包含金额的计算方式)

    日常对于金额计算,应该都是用的BigDecimal, 可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这个,简单粗暴好用,话不多说,代码奉上(该工具类需要引入google...r : 0; } /** * 计算金额方法 * @author : shijing * 2017年3月23日下午4:53:00 * @param b1...的安全减法运算 * @author : shijing * 2017年3月23日下午4:50:45 * @param isZero 减法结果为负数时是否返回0,true是返回0(金额计算时使用...r : 0; } /** * 金额除法计算,返回2位小数(具体的返回多少位大家自己看着改吧) * @author : shijing * 2017年3月23日下午5...b1, b2, BigDecimal.ZERO); } /** * BigDecimal的除法运算封装,如果除数或者被除数为0,返回默认值 * 默认返回小数位后2位,用于金额计算

    2.1K30

    【好靶场支付逻辑漏洞】--充值舍入漏洞

    https://github.com/haobachang-1/haobachangBlog/tree/main0x01 漏洞解析舍入漏洞是财务、支付、电商等涉及金额计算的系统中,因对小数金额的舍入规则设计不当或计算逻辑不统一...具体表现与危害:舍入方式不统一:例如,订单系统计算商品总价时采用 “四舍五入”(如 1.234 元舍入为 1.23 元),但支付系统对账时采用 “进一法”(如 1.234 元舍入为 1.24 元),或退款系统采用...例如,某商品单价 0.1 元,用户购买 3 件,正常总价应为 0.3 元,但浮点数计算可能得到 0.30000000000000004 元,若舍入时未处理该误差,可能导致订单金额异常。...,不依赖前端传递的 “总价” 参数,而是从数据库中获取商品基础单价、规格溢价(如尺寸、颜色加价)、当前有效优惠规则(如满减、折扣券),按照预设的业务逻辑重新计算订单总价,生成 “后端计算总价”,并与前端传递的...“前端提交总价” 进行比对,两者不一致则直接拒绝订单(错误码可设为 “金额校验失败”)。

    37710

    走进“乌云”教科书书里的漏洞(4)【充值舍入漏洞】

    0x01 漏洞解析舍入漏洞是财务、支付、电商等涉及金额计算的系统中,因对小数金额的舍入规则设计不当或计算逻辑不统一,导致实际金额与预期金额产生偏差,进而被攻击者利用获取非法利益的业务逻辑漏洞。...具体表现与危害:舍入方式不统一:例如,订单系统计算商品总价时采用 “四舍五入”(如 1.234 元舍入为 1.23 元),但支付系统对账时采用 “进一法”(如 1.234 元舍入为 1.24 元),或退款系统采用...例如,某商品单价 0.1 元,用户购买 3 件,正常总价应为 0.3 元,但浮点数计算可能得到 0.30000000000000004 元,若舍入时未处理该误差,可能导致订单金额异常。...,不依赖前端传递的 “总价” 参数,而是从数据库中获取商品基础单价、规格溢价(如尺寸、颜色加价)、当前有效优惠规则(如满减、折扣券),按照预设的业务逻辑重新计算订单总价,生成 “后端计算总价”,并与前端传递的...“前端提交总价” 进行比对,两者不一致则直接拒绝订单(错误码可设为 “金额校验失败”)。

    32910

    高级交互教程:用表达式函数实现APP购物车优惠券逻辑

    二、自动计价与优惠券使用购物车总价计算和优惠券使用涉及多种条件判断,我们可以将交互目标拆解如下:总价计算:总计价格 = 每个商品加购数量 × 商品价格之和;原价同理。...优惠券判断:当总价金额(例如 18.8 元),自动关闭优惠券开关,点击开关无法启用,并提示用户;当总价≥优惠券金额,打开开关时,总计金额和原价总计均减少优惠券金额。详细的操作步骤如下:1....商品加购后的金额计算以第一个商品为例,为数字步进器设置交互,触发方式——单击,其他同理:自动计算商品数量:将“总件数”设为“数量1”+“数量2”+“数量3”条件判断设置金额计算方式:条件1:如果“开关”...总价少于优惠券自动禁用一方面要满足用户打开和关闭开关对应的总计金额变化,另一方面需要对总计金额与优惠券大小做条件判断和禁用限制,对优惠券开关设置交互,触发方式——单击:条件1:如果“开关”==false...,“总计”与“原价总计”使用「无优惠券计算方式」这样可以保证用户操作开关时逻辑自洽,同时实现总价不足时自动禁用优惠券的效果。

    24910

    走进“乌云”教科书书里的漏洞(3)【修改金额薅羊毛漏洞】

    0x01 漏洞解析修改金额薅羊毛漏洞是电商、支付类系统中常见的业务逻辑漏洞,核心成因是系统对订单金额、支付金额等关键数据的校验机制缺失或不完整,导致攻击者可通过篡改数据绕过正常定价规则,以远低于正常价格甚至零成本获取商品或服务...具体表现为:数据篡改路径:攻击者通常通过抓包工具(如 Fiddler、Burp Suite)拦截前端向后端发送的订单请求、支付请求,直接修改请求中的金额参数(如将 “totalAmount=999” 改为...校验缺失场景:系统仅在前端进行金额展示和简单校验(如限制输入框不能输入负数),但未在后端对金额的合理性进行二次验证;或后端未基于数据库中存储的商品原价、优惠规则重新计算订单总价,直接信任前端传递的金额参数...关键在于后端,在接收支付请求后,必须重新计算商品总价,将后端数据库中存储的商品单价与用户选择的数量进行相乘,得到准确的总价,再与前端传递的总价参数进行比对,若不一致则直接拒绝支付请求。

    24210

    好靶场支付漏洞】修改商品金额薅羊毛漏洞

    0x01 漏洞解析修改金额薅羊毛漏洞是电商、支付类系统中常见的业务逻辑漏洞,核心成因是系统对订单金额、支付金额等关键数据的校验机制缺失或不完整,导致攻击者可通过篡改数据绕过正常定价规则,以远低于正常价格甚至零成本获取商品或服务...具体表现为:攻击者通常通过抓包工具(如 Fiddler、Burp Suite)拦截前端向后端发送的订单请求、支付请求,直接修改请求中的金额参数(如将 “totalAmount=999” 改为 “totalAmount...校验缺失场景:系统仅在前端进行金额展示和简单校验(如限制输入框不能输入负数),但未在后端对金额的合理性进行二次验证;或后端未基于数据库中存储的商品原价、优惠规则重新计算订单总价,直接信任前端传递的金额参数...关键在于后端,在接收支付请求后,必须重新计算商品总价,将后端数据库中存储的商品单价与用户选择的数量进行相乘,得到准确的总价,再与前端传递的总价参数进行比对,若不一致则直接拒绝支付请求。

    32810
    领券