bigdecimal

java保留2位小数及BigDecimal使用

匿名 (未验证) 提交于 2019-12-02 21:53:52
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class NumberFormatDemo { public static void main(String[] args) { // BigDecimal // 保留两位小数 System.out.println( new BigDecimal( 0.2).setScale( 2, BigDecimal.ROUND_HALF_UP).doubleValue()); // 0.2 System.out.println( new BigDecimal( 0.235).setScale( 2, BigDecimal.ROUND_HALF_UP).doubleValue()); // 0.23 System.out.println( new BigDecimal( 0.2351).setScale( 2, BigDecimal.ROUND_HALF_UP).doubleValue()); // 0.24 System.out.println( new BigDecimal( 42).setScale( 2, BigDecimal.ROUND_HALF_UP).doubleValue());

180615-精度计算BigDecimal

匿名 (未验证) 提交于 2019-12-02 21:53:52
文章链接: https://liuyueyi.github.io/hexblog/2018/06/15/180615-精度计算BigDecimal/ 目前接触的业务中,对数据的精度要求比较高,因此不再使用基本的float,double,改为用BigDecimal进行存储和相关的计算,端午前的这一篇博文,则简单的介绍下BigDecimal的使用姿势,早点回家早点放假 几个常见的构造方式,将基本类型+String等,转换为BigDecimal对象 public BigDecimal(char[] in); public BigDecimal(String val); public BigDecimal(BigInteger val); public BigDecimal(int val); public BigDecimal(long val); public BigDecimal(double val) public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); /

Java数学工具类MathUtil

匿名 (未验证) 提交于 2019-12-02 21:53:52
package cn.xbz.util.math; import java.math.BigDecimal; /** * @title 数学计算工具类 * @description 提供常用的数值加减乘除计算 , 及多个数值的求和 , 平均值 , 最大最小值计算 */ public class XMathUtil { /** 默认的除法精确度 */ private static final int DEF_DIV_SCALE = 2; /** * 精确加法运算 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和(BigDecimal) */ public static BigDecimal add(BigDecimal v1, BigDecimal v2) { if (null == v1) { v1 = BigDecimal.ZERO; } if (null == v2) { v2 = BigDecimal.ZERO; } return v1.add(v2); } /** * 精确减法运算 * @param v1 被减数 * @param v2 减数 * @return 两个参数的差(BigDecimal) */ public static BigDecimal subtract(BigDecimal v1, BigDecimal v2

java中对于浮点型数据操作

匿名 (未验证) 提交于 2019-12-02 21:53:32
java的基本数据类型-浮点型:单精度(float)和双精度(double)。   float:单精度浮点数在机内占 4 个字节、有效数字 8 位、表示范围: -3.40E+38 ~ +3.40E+38;   double:双精度浮点数在机内占 8 个字节、有效数字 16 位、表示范围: -1.79E+308 ~ +1.79E+308 浮点型计算速度快,但是精度低,float和double只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算,但是BigDecimal是引用类型,不是基本类型。  通过float、double来构建BigDecimal对象; BigDecimal的方法: public BigDecimal add(BigDecimal value); //加法 public BigDecimal subtract(BigDecimal value); //减法 public BigDecimal multiply(BigDecimal value); //乘法 public BigDecimal divide(BigDecimal value); //除法 BigDecimal的工具类MathOperation /** * 由于Java的简单类型不能够精确的对浮点数进行运算

Java lambda表达式的常见用法

匿名 (未验证) 提交于 2019-12-02 21:52:03
public class Java8Test { public static class Staff { private String name ; private int age ; private BigDecimal salary ; public Staff ( String name , BigDecimal salary , int age ) { this . name = name ; this . salary = salary ; this . age = age ; } public String getName () { return name ; } public int getAge () { return age ; } public BigDecimal getSalary () { return salary ; } } public static void main ( String [] args ) { List < Staff > list = new ArrayList <>(); list . add ( new Staff ( "测试" , new BigDecimal ( "8.8" ), 18 )); list . add ( new Staff ( "后端" , new BigDecimal ( "18.8" ), 20 ));

零基础学习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中lambda表达式详解

匿名 (未验证) 提交于 2019-12-02 21:52:03
原文地址: http://blog.laofu.online/2018/04/20/java-lambda/ 在java中我们很容易将一个变量赋值,比如int a =0;int b=a; 但是我们如何将一段代码和一个函数赋值给一个变量?这个变量应该是什么的类型? var t=function() { int a=1; a=a+1; alert(a); } 在java中,直到java8的lambda的特性问世,才有办法解决这个问题 什么是lambda? lambda在程序中到底是怎样的一个存在? 首先看代码: interface eat { void eatFood(); } public static void main(String[] args) { eat e = () -> System.out.printf("hello\n"); e.eatFood(); eat e1 = new eat() { @Override public void eatFood() { System.out.printf("anoymous class\n"); } }; e1.eatFood(); } 上面的代码中,e是一个lambda的对象,根据java的继承的特性,我们可以说e对象的类型是继承自eat接口。而e1是一个正常的匿名类的对象. 通过对比, 可以说

JAVA中如果用BigDecimal做除法

匿名 (未验证) 提交于 2019-12-02 21:52:03
原来JAVA中如果用BigDecimal做除法的时候一定要在divide方法中传递第二个参数,定义精确到小数点后几位,否则在不整除的情况下,结果是无限循环小数时,就会抛出以上异常。 解决方法: 1 foo.divide(bar, 2 , BigDecimal.ROUND_HALF_UP); 注意这个divide方法有两个重载的方法,一个是传两个参数的,一个是传三个参数的: 两个参数的方法: @param roundingMode rounding mode to apply. 传入round的模式 三个参数的方法: @param divisor value by which this {@code BigDecimal} is to be divided. 传入除数 @param scale scale of the {@code BigDecimal} quotient to be returned. 传入精度 @param roundingMode rounding mode to apply. 传入round的模式 解决方法: 1 foo.divide(bar, 2 , BigDecimal.ROUND_HALF_UP); 注意这个divide方法有两个重载的方法,一个是传两个参数的,一个是传三个参数的: 两个参数的方法: @param roundingMode

Java 常用API

匿名 (未验证) 提交于 2019-12-02 21:52:03
String代表字符串,是个常量,创建值之后不能再更改 变更字符串内容实际上是新开了内存空间,并改了记录的地址值,指向新字符串 String = new String( byte[] 或者 char[] ) int = str.length String = str.substring(index) String = str.substring(begin , end) boolean = str.startsWith("abc") boolean = str.endsWith("abc") boolean = str.contains("abc") boolean = str.isEmpty() int = str.indexOf("abc") int = str.indexOf( "abc" , startIndex ) byte[] = str.getBytes() 与 char[] = str.toCharArray() String = str.replace( old , new ) String = str.trim() String = str.toLowerCase() String = str.toUpperCase() 又称可变字符序列,即可变的字符串,其实就是一个容器,容器里存放多个字符串 长度可变,且支持任意类型(任意类型转成String存储)

JAVA产生N个随机数和为S

匿名 (未验证) 提交于 2019-12-02 21:45:52
import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class NumUtils { private static final BigDecimal TWO = new BigDecimal(2); public static BigDecimal getNumsBelowNum(BigDecimal num){ return num.multiply(new BigDecimal(Math.random())).setScale(2,BigDecimal.ROUND_DOWN); } public static List<BigDecimal> find(int n , BigDecimal s){ List<BigDecimal> res = new ArrayList<>(); BigDecimal amounts = BigDecimal.ZERO; for(int i = 0;i<n-1 ; i++){ BigDecimal amount = getNumsBelowNum((s.subtract(amounts)).divide(TWO).setScale(2,BigDecimal.ROUND_DOWN)); res.add(amount);