bigdecimal

bigDecimal除法取整数

匿名 (未验证) 提交于 2019-12-03 00:38:01
bigDecimal加减乘法都没问题,除法由于会有除不尽小数的情况,如果不限制小数位数的话会进入死循环报错: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result 。所以要设定小数位数: BigDecimal a = BigDecimal.valueOf(120); BigDecimal b = BigDecimal.valueOf(21); BigDecimal c = a.divide(b,0,BigDecimal.ROUND_HALF_UP); 这样就不会报错或者求整的话可以写 divideToIntegerValue方法 文章来源: bigDecimal除法取整数

杭电acm 1002

匿名 (未验证) 提交于 2019-12-03 00:32:02
注:题目请查看杭电ACM网站 不知道杭电acm编译通过的标准是什么,所以本题贴多种形式的代码。 由于数值大小问题,不能使用int类型,所以用String类型,也不用long 编译通过的: import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main (String []args) { Scanner sc = new Scanner(System. in ); int col = sc.nextInt(); if ( 1 <= col && col <= 20 ) { int row = 2 ; String[][] jihe = new String[col][row]; String value1 = null ; String value2 = null ; for ( int i = 0 ; i < col; i++) { value1 = sc.next(); value2 = sc.next(); if (i!=(col- 1 )) { System. out .println( "Case" + " " + (i+ 1 )+ ":\r\n" +value1+ " + " +value2+ " = " + new BigDecimal

使用BigDecimal进行精确运算

匿名 (未验证) 提交于 2019-12-03 00:26:01
首先我们先来看如下代码示例: public class Test_1 { public static void main (String[] args) { System. out .println( 0.06 + 0.01 ); System. out .println( 1.0 - 0.42 ); System. out .println( 4.015 * 100 ); System. out .println( 303.1 / 1000 ); } } 运行结果如下。 0.06999999999999999 0.5800000000000001 401.49999999999994 0.30310000000000004 你认为你看错了,但结果却是是这样的。问题在哪里呢?原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999。浮点数的值实际上是由一个特定的数学公式计算得到的。 其实java的float只能用来进行科学计算或工程计算,在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。

mybatis-dynamic-query 3.0 更新

匿名 (未验证) 提交于 2019-12-03 00:13:02
项目地址: mybatis-dynamic-query 在 2.0 完成对 tk.mapper 集成, 为何 mybatis-dynamic-query 选择 tk.mapper 集成 , 再 3.0 进一步对查询进行优化,当然这里可能会对比 mybatis-plus, 我觉得有对比大家才能选择自己合适的。 添加 DynamicQueryBuilder 步骤化生成 DynamicQuery 语句 优化 DynamicQuery 添加,移除筛选和排序 这个在 3.0 引入,目的是为了让大家写查询的时候真的像写 sql (严格遵循 sql 查询顺序),最后通过 build 方法来 build 一个 DynamicQuery, 根据经验来看 DynamicQueryBuilder 适合筛选条件已知的情况下。 public List<ProductsDO> getProductListByBuilder() { // select product_name, list_price, category // where (list_price > 1 and list_price < 10) and description is not null or id = 1 // order by id desc, list_price asc DynamicQuery<ProductsDO>

斐波那契数列 面试算法(三)

微笑、不失礼 提交于 2019-12-02 23:58:28
import java.math.BigDecimal; import java.util.Scanner; import java.util.function.BinaryOperator; public class Fbnq { /** * 假设n为正整数,斐波那契数列定义为: * f(n) = 1, n < 3; * f(n) = f(n-1) + f(n-2), n>=3 * * 现在请你来计算f(n)的值,但是不需要给出精确值,只要结果的后六位即可。 * * 输入:一行,包含一个正整数n,且0<n<1000 * 输出:一行,f(n)的后6位(十进制,不足6位不补零) * @param args */ public static void main(String[] args) { Scanner s = new Scanner(System.in); int i = s.nextInt(); BigDecimal f2 = fb(i); String v = String.valueOf(f2); if (v.length() > 6) { String substring = v.substring(v.length() - 6); System.out.println(substring); }else { System.out.println(v); } }

拯救你丢失的精度――BigInteger和BigDecimal类(入门)

匿名 (未验证) 提交于 2019-12-02 23:43:01
第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法: (二) 常用方法: BigInteger类 由于在运算的时候,float类型和double很容易丢失精度(下例为演示),所以为了能精确的表示、计算浮点数,Java提供了BigDecimal (一) 构造方法: 我们来帖一组说明 BigDecimal public BigDecimal(double val) 将double转换为BigDecimal ,这是double的二进制浮点值的精确十进制表示。 返回的BigDecimal是(10scale × val)是一个整数的最小值。 笔记: 这个构造函数的结果可能有些不可预测 。 可以假设在Java中写入new BigDecimal(0.1)创建一个BigDecimal ,它完全等于0.1(非标尺值为1,比例为1),但实际上等于0.1000000000000000055511151231257827021181583404541015625。 这是因为0.1不能像double (或者作为任何有限长度的二进制分数)精确地表示。 因此,正在被传递给构造的值不是正好等于0.1,虽然表面上。 该String构造,在另一方面,是完全可以预测的:写new BigDecimal("0.1")创建BigDecimal这正好等于0

BigDecimal运算

匿名 (未验证) 提交于 2019-12-02 23:43:01
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。 在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal 。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。 运行结果: 加法用value结果:1000000.005000000000000000104083408558608425664715468883514404296875 加法用string结果:1000000.005 减法value结果:-999999.994999999999999999895916591441391574335284531116485595703125 减法用string结果:-999999.995 乘法用value结果:5000.000000000000104083408558608425664715468883514404296875000000 乘法用string结果:5000.000

两个double类型的值比大小

匿名 (未验证) 提交于 2019-12-02 23:42:01
package wxText; import java.math.BigDecimal; public class DoubleDemo { public String compare(BigDecimal val1, BigDecimal val2) { String result = ""; if (val1.compareTo(val2) < 0) { result = "第二位数大!"; } if (val1.compareTo(val2) == 0) { result = "两位数一样大!"; } if (val1.compareTo(val2) > 0) { result = "第一位数大!"; } return result; } public static void main(String[] args) { double a = 0.01; double b = 0.01; BigDecimal data1 = new BigDecimal(a); BigDecimal data2 = new BigDecimal(b); System.out.print(new DoubleDemo().compare(data1, data2)); } }

Check if BigDecimal is integer value

 ̄綄美尐妖づ 提交于 2019-12-02 23:19:01
Can anyone recommend an efficient way of determining whether a BigDecimal is an integer value in the mathematical sense? At present I have the following code: private boolean isIntegerValue(BigDecimal bd) { boolean ret; try { bd.toBigIntegerExact(); ret = true; } catch (ArithmeticException ex) { ret = false; } return ret; } ... but would like to avoid the object creation overhead if necessary. Previously I was using bd.longValueExact() which would avoid creating an object if the BigDecimal was using its compact representation internally, but obviously would fail if the value was too big to fit

java基础语法学习笔记(二)

拜拜、爱过 提交于 2019-12-02 22:54:45
六、字符串 java没有内置的字符串类型,而是在标准java类库中提供了一个预定义类String。每个用双引号括起来的字符串都是String类的一个实例: String a = “”; //an empty string String greeting = “Hello”; String 类没有提供用于修改现存字符串的方法。所以,在java文档中将String类对象称为不可变字符串。 String类的substring方法可以从一个较大的字符串提取出一个子串。 java语言通过 + 号连接两个字符串。 可以使用equals方法检测两个字符串是否相等。如果字符串s与字符串t相等,则表达式s.equals(t)返回true;否则,返回flase。要想检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。注意,一定不能使用==运算符检测两个字符串是否相等。这个运算符只能够确定两个字符串是否被放置在同一个位置。 七、输入输出 使用到Scanner类,熟悉一下里面的几个方法nextLine(),nextInt()等。 八、控制流程 块是指由一对花括号括起来的若干条简单的java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量。 条件语句的格式为 if(condition) statement