bigdecimal比较大小

Bigdecimal概述

自作多情 提交于 2019-12-06 10:53:31
一、BigDecimal概述 ​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。 ​ BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。 二、BigDecimal常用构造函数 2.1、常用构造函数 BigDecimal(int) 创建一个具有参数所指定整数值的对象 BigDecimal(double) 创建一个具有参数所指定双精度值的对象 BigDecimal(long) 创建一个具有参数所指定长整数值的对象 BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象 2.2、使用问题分析 使用示例: BigDecimal

BigDecimal

坚强是说给别人听的谎言 提交于 2019-12-05 14:25:38
public class BigDecimalUtils { /** * 默认除法运算精度 */ private static final int DEFAULT_DIV_SCALE = 8; /** * 采用 BigDecimal 的字符串构造器进行初始化。 * * @param v double 值 * @return BigDecimal 对象 */ private static BigDecimal createBigDecimal(double v) { return new BigDecimal(Double.toString(v)); } /** * 提供精确的加法运算。 * * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static BigDecimal add(BigDecimal v1, BigDecimal v2) { return v1.add(v2); } /** * 提供精确的加法运算。 * * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static BigDecimal add(double v1, double v2) { BigDecimal b1 = createBigDecimal(v1);

花了几个小时总结了一些容易出错的 Java 知识点!

自闭症网瘾萝莉.ら 提交于 2019-12-05 06:09:42
摘自: https://www.cnblogs.com/javaguide/p/11891447.html 花了几个小时总结了一些容易出错的 Java 知识点! 本文已经收录自 JavaGuide (61k+Star!【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!欢迎骚扰!) 原文地址:https://javaguide.cn/2019/08/20/java/java%E5%9F%BA%E7%A1%80/Java%E7%96%91%E9%9A%BE%E7%82%B9/ 1. 基础 1.1. 正确使用 equals 方法 Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。 举个例子: // 不能使用一个值为null的引用类型变量来调用非静态方法,否则会抛出异常 String str = null; if (str.equals("SnailClimb")) { ... } else { .. } 运行上面的程序会抛出空指针异常,但是我们把第二行的条件判断语句改为下面这样的话,就不会抛出空指针异常,else 语句块得到执行。: "SnailClimb".equals(str);// false 不过更推荐使用 java.util.Objects#equals (JDK7 引入的工具类)。

零基础学习java------day12------

匿名 (未验证) 提交于 2019-12-02 21:52:03
0.数组高级 (1)选择排序     它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的起始位置。以此类推,直到全部待排序的数据元素排完 // 选择排序 /** * asc:升序 desc:降序 * @param arr 要排序的数组 * @param isAsc 是否升序 true:升序 false:降序 */ // 下面是直接交换元素,零一种方法是定义一个最小下角标,如minIndex = i public static void selectSort(int[] arr, boolean isAsc) { for(int i=0;i<arr.length-1;i++) { for(int j=i+1;j<arr.length;j++) { if(isAsc) { if(arr[j]<arr[i]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }else { if(arr[j]>arr[i]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } View Code (2)冒泡排序    冒泡排序(Bubble Sort)

Java中BigDecimal类介绍及用法

∥☆過路亽.° 提交于 2019-11-30 22:04:42
Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算.    其中 BigInteger 类是针对大整数的处理类,而 BigDecimal 类则是针对大小数的处理类.   BigDecimal 类的实现用到了 BigInteger类,不同的是 BigDecimal 加入了小数的概念.   float和Double只能用来做科学计算或者是工程计算;在商业计算中,对数字精度要求较高,必须使用 BigInteger 类和 BigDecimal 类,它支持任何精度的定点数,可以用它来精确计算货币值.    BigDecimal类创建的是对象,不能使用传统的+、-、*、/等算术运算符直接对其进行数学运算,而必须调用其对应的方法.方法的参数也必须是BigDecimal类型的对象. 一、构造BigDecimal 对象常用方法   1、方法一 BigDecimal BigDecimal(double d); //不允许使用    2、方法二 BigDecimal BigDecimal(String s); //常用,推荐使用    3、方法三 static BigDecimal valueOf(double d); //常用,推荐使用    注意:    1. double

java常用类 比较器/system/math/big

醉酒当歌 提交于 2019-11-30 21:37:02
Java 比较器   自然排序:java.lang.Comparable   定制排序:java.util.Comparator 自然排序:java.lang.Comparable    Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称 为类的自然排序。    实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即 通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大 于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回 负整数,如果当前对象this等于形参对象obj,则返回零。    实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或 Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有 序集合中的元素,无需指定比较器。    对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。    Comparable 的典型实现:(默认都是从小到大排列的)  

BigDecimal

筅森魡賤 提交于 2019-11-29 19:11:13
BigDecimal 概念 BigDecimal = 大的小数。用于表示精确的小数,常用于财务计算。 和 BigInteger 类似, BigDecimal 可以表示一个任意大小且精度完全准确的浮点数。 基础 BigDecimal bd = new BigDecimal"123.4567"); BigDecimal用scale()表示小数位数,例如: BigDecimal d1 = new BigDecimal("123.45"); BigDecimal d2 = new BigDecimal("123.4500"); BigDecimal d3 = new BigDecimal("1234500"); System.out.println(d1.scale()); // 2,两位小数 System.out.println(d2.scale()); // 4 System.out.println(d3.scale()); // 0 stripTrailingZeros()方法,去掉末尾的0 BigDecimal d1 = new BigDecimal("123.4500"); BigDecimal d2 = d1.stripTrailingZeros(); System.out.println(d1.scale()); // 4 System.out.println(d2

转:BigDecimal 使用方法详解

元气小坏坏 提交于 2019-11-29 02:03:07
转贴:http://zhangyinhu8680.iteye.com/blog/1536397 BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。 可以处理任意长度的浮点数运算。 BigDecimal add(BigDecimal val) //加法 BigDecimal subtract (BigDecimal val) //减法 BigDecimal multiply (BigDecimal val) //乘法 BigDecimal divide (BigDecimal val,RoundingMode mode) //除法 具体使用 计算:     加: a.add(b);   减: a.subtract(b);   乘: a.multiply(b);   除: a.divide(b,2);//2为精度取值 除法细解: //注意以下相除会抛出异常,原因: 通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常 //BigDecimal divideBg = a.divide(b); //解决方法是

24-特殊数据类型

不问归期 提交于 2019-11-28 17:50:45
枚举类 在Java中,我们可以通过static final来定义常量,无论是int常量还是String常量,使用这些常量来表示一组枚举值的时候,有一个严重的问题就是,编译器无法检查每个值的合理性。为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举类。 public class Main { public static void main(String[] args) { Weekday day = Weekday.SUN; if (day == Weekday.SAT || day == Weekday.SUN) { System.out.println("Work at home!"); } else { System.out.println("Work at office!"); } } } enum Weekday { SUN, MON, TUE, WED, THU, FRI, SAT; } 定义枚举类是通过关键字enum实现的,只需依次列出枚举的常量名。 和int定义的常量相比,enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,而且不同类型的枚举不能互相比较或者赋值,也不可能引用到非枚举的值。 enum的比较

java编码中注意问题的总结

試著忘記壹切 提交于 2019-11-28 10:24:32
1. java中的浮点数比较事项 1.1 若精度要求不高,比如因为传感器有误差,小于0.001的数都可以认为等于0,那么就定义epsilon = 0.001: 1 private final double epsilon = 1e-9; 2 double double_x = 0.0; 3 if(Math.abs(double_x - 0) < epsilon) 4 { 5 System.out.println("true"); 6 } 1.2 转换成字符串之后用equals方法比较 1 Double.toString(double_x).equals(Double.toString(double_y)) 注意:这种方法只适用于比较精度相同的数据,并且是只用用于比较是否相等的情况下,不能用来判断大小。 1.3 转换成Long之后用==方法比较 Sun提供了一种将Double类型转换成Longo类型的方法,即 Double.doubleToLongBits() 方法,从而可以使double按照long的方法(<, >, ==)判断是否大小和是否相等。 1 Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01; 2 Double.doubleToLongBits(0.02) > Double