首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏大前端

    Kotlin BigDecimal 精确计算

    完整工具类 /** * 加、减、乘、除 高精度计算工具类 * @author lyl 20190191 * */ object UtilsBigDecimal { // 需要精确至小数点后几位 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同; 如果为负,则舍入行为与 ROUND_DOWN 相同。 注意,此舍入模式始终不会减少计算值。 如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同; 如果为负,则舍入行为与 ROUND_UP 相同。 注意,此舍入模式始终不会增加计算值。 1.15>1.2 1.25>1.2 ROUND_UNNECESSARY 断言请求的操作具有精确的结果,因此不需要舍入。 如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。 完毕。

    5.1K20发布于 2019-04-11
  • 来自专栏Spring相关

    使用BigDecimal 进行浮点值的精确计算

    import java.math.BigDecimal; public class DecimalTest { public static void main(String[] args) subtractTest(7.2882,7.10)); } private static double subtractTest(double v, double v1) { BigDecimal b1 = new BigDecimal(Double.toString(v)); BigDecimal b2 = new BigDecimal(Double.toString(v1))

    2.2K30发布于 2019-01-28
  • 来自专栏程序员小跃

    你以为用了BigDecimal后,计算结果就一定精确了?

    首先问大家一个问题,平时加减乘除用的大部分是不是int类型,如果遇到金额计算,你们用什么呢?想必做过电商的小伙伴们能马上回答,说用BigDecimal,那么,你用了这个就一定精确了吗? double为什么不精确 首先,计算机是只认识二进制的,即0和1,这个大家一定都知道。 那么,所有数字,包括整数和小数,想要在计算机中存储和展示,都需要转成二进制。 所以,计算机是没办法用二进制精确的表示0.1的。也就是说,在计算机中,很多小数没办法精确的使用二进制表示出来。 那么,这个问题总要解决吧。 总结 因为计算机采用二进制处理数据,但是很多小数,如0.1的二进制是一个无线循环小数,而这种数字在计算机中是无法精确表示的。 所以,当使用BigDecimal(Double)创建一个的时候,得到的BigDecimal是损失了精度的。 而使用一个损失了精度的数字进行计算,得到的结果也是不精确的。

    1.1K20发布于 2021-02-25
  • 来自专栏小明说Java

    Java中使用BigDecimal处理金额计算精确性、安全性与最佳实践

    前言在电商系统中,金额计算精确性和安全性具有举足轻重的地位。 为什么选择BigDecimalBigDecimal类提供了任意精度的带符号十进制数,非常适合需要精确小数点运算的场景。 此外,BigDecimal的精度和舍入模式都是可控的,这使得它在金融计算中具有显著优势。 因此,推荐使用String类型的参数来创建BigDecimal实例,以确保数值的精确表示。 结论在处理金额计算时,BigDecimal类提供了必要的精确性和安全性。通过合理使用BigDecimal,可以避免由于浮点数精度问题导致的计算错误,确保金融系统的可靠性和稳定性。

    1.7K10编辑于 2024-12-23
  • 来自专栏杨龙飞前端

    js精确计算

    官方文档:http://mikemcl.github.io/big.js/ 使用方法: x = new Big(0.1); y = x.plus(0.2); // '0.3' var a=Big(0.7).plus(x).plus(y); console.log(a.toString()); //a 是一个big对象,通过toString()方法转化成字符串 结果是1.1 博客地址:http://www.cnblogs.com/windseek/

    4.4K60发布于 2018-05-15
  • 来自专栏程序小小事

    Java BigDecimal详解:小数精确计算、使用方法与常见问题解决方案

    通过实际代码示例演示如何避免浮点数精度问题,并提供完整的工具类实现,帮助开发者掌握高精度数值计算的正确方式。 与double和float类型不同,BigDecimal能够提供完全精确计算结果,特别适用于金融、财务等对精度要求严格的领域。 四种常用构造函数对比构造函数参数类型精度表现推荐指数BigDecimal(int)int精确★★★★☆BigDecimal(double)double可能不精确★★☆☆☆BigDecimal(long) 性能优化建议仅在需要精确计算的场景使用BigDecimal避免在循环中频繁创建BigDecimal对象对于固定值,考虑使用静态常量(如BigDecimal.ZERO)六、完整工具类实现public class }}七、最佳实践总结构造函数选择:优先使用String参数的构造函数不可变性:BigDecimal是不可变对象,每次运算都会生成新对象除法运算:必须指定精度和舍入模式性能考虑:在不需要精确计算的场景使用基本类型比较操作

    1.1K00编辑于 2025-07-28
  • 来自专栏全栈程序员必看

    BigDecimal加减乘除计算

    前阵子做题遇到了大数的精确计算,再次认识了bigdecimal 关于Bigdecimal意外的有许多小知识点和坑,这里特此整理一下为方便以后学习,希望能帮助到其他的萌新 ---- BigDecimal 2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的! 因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。 如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同; 如果为负,则舍入行为与 ROUND_DOWN 相同。 注意,此舍入模式始终不会减少计算值。 6、ROUND_HALF_DOWN 向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

    4.4K20编辑于 2022-07-23
  • 来自专栏苏三说技术

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

    大家好,我是苏三,又跟大家见面了 前言 对于从事后端开发的小伙伴来说,可能会遇到金额计算字段的类型,到底该用Long,还是BigDecimal的困扰。 这就好比用1/3 ≈ 0.333333来表示三分之一,永远无法精确计算机的二进制系统也无法精确表示某些十进制小数。 精确计算 BigDecimal是Java提供的专门用于精确计算的类。 private BigDecimal price; // 复杂优惠计算 public BigDecimal calculateFinalPrice( BigDecimal 、价格引擎、促销活动 理由:灵活性、计算精度、业务变化快 混合型系统:采用分层架构 核心层用Long保证性能 计算层用BigDecimal保证精度 表现层做好格式化显示 7.3 最后的建议 记住这三条铁律

    18110编辑于 2026-01-12
  • 来自专栏站长的编程笔记

    PHP 精度计算问题(精确算法)

    PHP 中的精度计算问题 ---- 当使用 php 中的 +-*/ 计算浮点数时, 可能会遇到一些计算结果错误的问题 这个其实是计算机底层二进制无法精确表示浮点数的一个 bug, 是跨域语言的, 比如 js 中的 舍入误差 所以大部分语言都提供了用于精准计算的类库或函数库, 比如 php 中的 bc 高精确度函数库, js 中的 toFixed() 如下所示: 将计算结果浮点数 58 转为整数后结果是 PHP 中的 bc 高精确度函数库 ---- 常用的高精度函数 // 高精度加法 bcadd(string $num1, string $num2, int $scale = 0); // 高精度减法 比较两个高精度数字 bccomp(string $num1, string $num2, int $scale = 0); 特别注意: 从 PHP7 开始, 很多框架中都使用了严格模式(比如: TP6) 推荐文章 ---- PHP 精度计算问题: https://www.cnblogs.com/xiezhi/p/5688029.html

    2.9K20编辑于 2022-12-28
  • 来自专栏每周聚焦

    BigDecimal不可触碰的6个坑

    这是因为0.1这个数字在double类型中无法精确表示。 为了避免这种精度问题,应该使用BigDecimal(String val)构造方法来创建BigDecimal对象。 2使用setScale方法设置精度 默认情况下,BigDecimal对象的精度是无限的。但是,在某些情况下,我们可能需要将精度限制在一定范围内。例如,我们可能需要将一个小数精确到两位小数点。 例如: BigDecimal bd1 = new BigDecimal("1.0"); BigDecimal bd2 = new BigDecimal("1.00"); System.out.println 0.1但不完全等于0.1的值,因为0.1无法精确表示为一个double类型的数值。 6避免使用BigDecimal的equals方法 BigDecimal提供了equals方法来比较两个对象是否相等。

    2.5K10编辑于 2023-03-10
  • 来自专栏闻道于事

    Java工具类之浮点精确计算

    private static final int DEF_DIV_SCALE = 10; // 构造器私有,让这个类不能实例化 private Arith() {} // 提供精确的加法运算 public static double add(double v1,double v2) { BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.add(b2).doubleValue(); } // 提供精确的减法运算 BigDecimal b2 = BigDecimal.valueOf(v2); return b1.subtract(b2).doubleValue(); } // 提供精确的乘法运算 (相对)精确的除法运算,当发生除不尽的情况时. // 精确到小数点以后10位的数字四舍五入。

    1.1K20发布于 2018-07-03
  • 来自专栏python3

    python计算时间间隔(精确到微妙)

    使用python中的datetime import datetime oldtime=datetime.datetime.now() print oldtime; x=1 while x<10000000: x=x+1 newtime=datetime.datetime.now() print newtime; print u'相差:%s'%(newtime-oldtime) print u'相差:%s微秒'%(newtime-oldtime).microseconds print u'相差:%s秒

    3.6K10发布于 2020-01-07
  • 来自专栏码农小胖哥的码农生涯

    Java开发中商业计算请务必使用BigDecimal来进行计算

    前言 今天群里一个初级开发者问为什么测试人员测出来他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。 这里小胖哥要提醒你,商业计算请务必使用`BigDecimal`,浮点做商业运算是不精确的。因为计算机无法使用二进制小数来精确描述我们程序中的十进制小数。 《Effective Java》在第48条也推荐“使用BigDecimal来做精确运算”。今天我们就来总结归纳其相关的知识点。 2. 我们使用BigDecimal进行高精度算术运算。我们还将它用于需要控制比例和舍入行为的计算。如果你的计算是商业计算请务必使用计算精确的`BigDecimal` 。 3. :这个比较绕,整数位若是奇数则四舍五入,若是偶数则五舍六入 RoundingMode.ROUND_UNNECESSARY:不需要取整,如果存在小数位,就抛ArithmeticException 异常 6.

    2K20发布于 2019-12-10
  • 来自专栏全栈程序员必看

    使用BigDecimal进行科学计算表示方式的转换

    1.实战: import java.math.BigDecimal; /** * Created by zhangzh on 2017/6/9. */ public class BigDecimalTest public static void main(String[] args) { String number = "1.49688845586E+12"; BigDecimal bigDecimal = new BigDecimal(number); // 转String System.out.println("string number:" + bigDecimal.toPlainString()); // 转long System.out.println("long number:" + bigDecimal.longValue

    1K10编辑于 2022-07-05
  • 来自专栏编程我也会

    计算机居然不能精确计算0.1+0.2?

    小云不服道:这不能怪我,谁知道计算机那么傻,居然不能精确计算0.1+0.2,不信你看,结果居然是0.30000000000000004,0.3后面还有一长串00000。 0.01 0.25太小了 那我们多加一位二进制数试试, 0.375太大了 这次缩小点试试 image.png 0.3125还是太大 我去,我继续试试试 image.png 事实证明,二进制数无法精确表示 0.3,就像十进制无法精确表示1/3一样: 所以二进制表示0.3只能用近似值,再转换成十进制就表示成 0.30000000000000004 了 小云豁然开朗:那计算机里小数点的浮点计算怎么处理呢? 小帅在电脑前面啪啪啪的敲了一会代码,显示出了程序员应有的成熟与稳重,指着屏幕说: java可以用 BigDecimal 类来进行浮点数计算BigDecimal没有减法运算方法,减法就是加上一个负数 ,然后在计算,最后转换回小数 最后,涉及到浮点数计算,要特别小心,如果是不需要很精确计算直接运算就行,如果系统涉及到金额计算,一定要用Decimal类或者放大成整数后计算,还有比较常见的一种做法是,

    72810编辑于 2022-05-16
  • 如何精确计算CDN的并发流量?

    精确计算CDN的并发流量需要考虑多个因素,包括用户的访问模式、内容类型、网络带宽和CDN配置等。以下是一些关键步骤和方法:1. 理解并发流量并发流量是指在同一时刻通过CDN传输的请求数或数据量。 计算公式可以使用以下公式进行基本的并发流量计算:1. 带宽计算假设你知道每个请求的平均内容大小,可以计算出所需带宽:4. 实时监控为了获得更精确的并发流量数据,可以使用CDN提供的监控工具,实时跟踪以下指标:实时流量监控:监控每个节点的流量情况,识别高峰时段。请求数:跟踪每秒的请求数变化,帮助识别流量模式。 6. 计算实例假设你有以下数据:活跃用户数:1000每个用户平均请求数:5平均内容大小:2 MB测试时间:60秒7. 结论精确计算CDN的并发流量需要结合用户行为分析、内容特性和实时监控工具。

    75110编辑于 2024-10-20
  • 来自专栏Java极客技术

    手把手教你进行 Java 的精确计算

    作为 Java 程序员在日常的工作中,很多时候我们都会遇到一些需要进行数据计算的场景,通常对于不需要计算精度的场景我们都可以使用 Integer,Float 或者 Double 来进行计算,虽然会丢失精度但是偶尔也可以用 ,如果我们需要精确计算结果的时候,就会用到 java.math 包中提供的 BigDecimal 类来实现对应的功能了。 BigDecimal 作为精确数据计算的工具,既然是数据计算,那肯定会提供相应的加减乘除的方法来让我们使用,如下: add(BigDecimal):BigDecimal 对象中的值相加,返回 BigDecimal RoundingMode.HALF_UP 相同;如果它是偶数,则表现为 RoundingMode.HALF_DOWN public final static int ROUND_HALF_EVEN = 6; ); double v1 = num1.doubleValue(); short i2 = num1.shortValue(); byte b = num1.byteValue(); 在日常工作中需要精确的小数计算时使用

    84010编辑于 2022-12-02
  • 来自专栏python-爬虫

    爬虫滑块计算图片之间的距离更加精确

    1.思路 原先图片匹配一般都是缺口匹配全图 优化点: 1.缺口图片匹配缺口所在图片那一行图片可以提高他识别率 2.移动后再进行2次匹配计算距离 2.代码 #.缺口图片匹配缺口所在图片那一行图片可以提高他识别率

    1.9K20发布于 2020-06-19
  • 来自专栏AI机器学习与深度学习算法

    机器学习入门 10-6 精确率-召回率曲线

    通过上一小节的学习,我们知道decision_function(X_test)函数得到的是每一个测试样本在分类算法上计算的分数值score。 在逻辑回归算法中默认分数值score是以0为判断标准的(threshold阈值 = 0): 如果计算样本的score值 ≥ 0,就将这个样本分类为1; 如果计算样本的score值 < 0,就将这个样本分类为 定义两个命名为precisions和recalls的list空列表,其中precisions列表中用于存放在不同阈值上计算的精准率,recalls列表中用于存放在不同阈值上计算的召回率; decision_function ,然后将计算出来的精准率和召回率对应的添加到precisions和recalls列表中。 c 本节小结 最后来简单总结一下,首先绘制了横轴代表取不同的阈值,而相应的两根不同颜色的曲线分别是随着阈值的改变精确率和召回率两个指标的变化趋势。

    4.3K30发布于 2020-05-13
  • 来自专栏全栈开发那些事

    java中BigDecimal类型比较大小和绝对值计算

    关键方法: 修饰符 方法 描述 BigDecimal compareTo(BigDecimal val) 将此 BigDecimal与指定的BigDecimal进行 比较,小于返回-1,等于返回0,大于返回 1 代码测试: import java.math.BigDecimal; //临时测试类 public class CalculateTest { private static BigDecimal X=new BigDecimal("0.4"); private static BigDecimal Y=new BigDecimal("0.5"); private static BigDecimal Z=new BigDecimal("0.6"); private static BigDecimal T=new BigDecimal("0.4"); public static 绝对值计算 System.out.println(X.subtract(Y).abs()); } } 运行结果: -1 1 0 0.4小于0.5 0.5大于0.4 0.4

    3K30编辑于 2023-02-25
领券