bigdecimal

Java BigDecimal 四舍五入

ε祈祈猫儿з 提交于 2020-03-03 00:34:01
import java.math.BigDecimal; public class NP_BigDecimal { public static void main(String[] args) { /** * values are String's type. */ BigDecimal a = new BigDecimal("1"); BigDecimal b = new BigDecimal("8"); /** * show "+ - * /" */ BigDecimal result; result = a.add(b); result = a.subtract(b); result = a.multiply(b); result = a.divide(b, 2, BigDecimal.ROUND_HALF_DOWN); System.out.println(result); /** * 四舍五入 * 2 为保留多少位小数,BigDecimal.ROUND_HALF_DOWN 为 四舍五入的参数 */ result = result.setScale(2, BigDecimal.ROUND_HALF_DOWN); System.out.println(result); } } 来源: CSDN 作者: Yuanxuan0210 链接: https://blog.csdn

java基础知识

拜拜、爱过 提交于 2020-03-01 22:47:55
1.final 关键字主要用在三个地方:变量、方法、类。 对于一个 final 变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。 当用 final 修饰一个类时,表明这个类不能被继承。final 类中的所有成员方法都会被隐式地指定为 final 方法。 使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义; 2.static 关键字主要有以下四种使用场景? 修饰成员变量和成员方法: 被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区。调用格式:类名.静态变量名 类名.静态方法名() 静态代码块: 静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。 该类不管创建多少对象,静态代码块只执行一次. 静态内部类(static修饰类的话只能修饰内部类): 静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1. 它的创建是不需要依赖外围类的创建。2.

java中Integer转Float总结以及BigDecimal 转float

試著忘記壹切 提交于 2020-03-01 14:21:43
一.先将Integer转化成int类型,在强制转float类型 例:Integer str = new Integer(20); int i = str.intValue(); float rr = (float)i; 输出结果为:20.0 二.将Integer类型转成String类型,在转化成float类型 例:Integer str = 2056; String format = new BigDecimal(String.valueOf(str)).toString(); float rr = Float.valueOf(format); 输出结果为20.0 三.BigDecimal 转float 例: BigDecimal tt = new BigDecimal(50) ; float kk = tt.floatValue(); 输出结果:50.0 以上均本人亲自测试,如不符合,请仔细检查 来源: https://www.cnblogs.com/jbml-154312/p/7890373.html

动手动脑及课后实验性问题

送分小仙女□ 提交于 2020-03-01 07:39:10
一关于精度损失 关于 java 对于 0.05+0.01 , 1-0.42 等计算的不准确原因是因为计算机是以二进制来储存一个数的,有的数从二进制转化到十进制时就会出现误差这就导致了计算的不准确,比如 0.01 在电脑里储存的其实是 0.00999999999 或者是其他的一个很接近 0.01 的数但是计算机毕竟是拿这个接近 0.01 的数去运算所以就出现了计算时候的错误 而解决这一问题的方法就是使用 BigDecimal 类,就比如 BigDecimal a = new BigDecimal(m); BigDecimal b = new BigDecimal(n);a.add(b) ; 来求 m+n 这就不会有误差,但要记住 m , n 都是字符串类型而不能使用 double 类型,因为虽然 BigDecimal 是可以比较精确的计算,但是 double 是无法精确到 1/10 的就像十进制无法精确表示 1/3 一样。 Double 里面的的值已经不准确了,即使 BigDecimal 可以较为精确的计算但是 double 给他的值就是不正确的,所以没办法得到正确答案。 二动手动脑 以下代码的输出结果是什么? int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y");

BigDecimal的精确计算及工具类

假如想象 提交于 2020-02-29 08:15:59
System.out.println(new BigDecimal("10000000000").toString()); System.out.println( new BigDecimal("100.000").toString()); System.out.println( new BigDecimal("100.000").stripTrailingZeros().toString()); System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString()); 输出: 10000000000 100.000 1E+2 100 BigDecimal是处理高精度的浮点数运算的常用的一个类 当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到预想之外的科学技术法表示的问题。 一般直接使用 BigDecimal.toString()方法即可以完成浮点数的打印。如: System.out.println( new BigDecimal("10000000000").toString()); 但是,toString()方法输出的字符串并不能保证不是科学计数法。 不过在日常的使用中,用toString()方法输出的就是普通的数字字符串而非科学计数法

架构师内功心法,有重构项目经验必备的装饰者模式详解

Deadly 提交于 2020-02-28 17:01:48
一、装饰者模式的应用场景 在我们的生活中比如给煎饼加个鸡蛋,给蛋糕加上一些水果,给房子装修等。为对象扩展一些额外对象的职责。装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)。 装饰者模式使用于以下几种场景: 用于扩展一个类的功能或给一个类添加附加职责; 动态的给一个对象添加功能,这些功能可以动态的撤销。 1.1 🌮 早餐吃煎饼的装饰者模式 在北京早上通勤上班的同学们,都有吃过路边摊的煎饼吧。买煎饼的时候可以让他给你加个鸡蛋,也可以加香肠,还可以加辣条等。下面我们用代码来实现下这个生活场景的案例,首先创建一个煎饼 BatterCake 类: public class BatterCake { protected String getMsg() { return "煎饼"; } protected BigDecimal getPrice() { return new BigDecimal(6.00); } } 再创建一个加鸡蛋的煎饼 BatterCakeWithEgg 类: public class BatterCakeWithEgg extends BatterCake { @Override protected String getMsg() { return super.getMsg() +

java中new BigDecimal的坑

风流意气都作罢 提交于 2020-02-28 11:40:51
BigDecimal.valueOf(0.004) new BigDecimal(0.004) 前者:输出的结果是0.004 后者:输出的结果是0.00400000000000000008326672........................... 注意事项: 所以,在比较大小的时候,切记,要用BigDecimal.valueOf,否则临界值判断时逻辑就有误 原因:由于后者,对象没有指定精度,如果指定精度的话,也就正常了,如: new BigDecimal(0.004).setScale(3,RoundingMode.HALF_UP) 来源: oschina 链接: https://my.oschina.net/u/2350117/blog/784936

mybatis 批量新增 orcale带序列

大城市里の小女人 提交于 2020-02-28 03:46:13
以前用的是MySQL,现在公司用orcale,差别在于orcale表id 不是主键自增的,而是用序列,网上搜到的几种xml写法都用不了,后来copy朋友写的xml改了下就能使用了,现分享如下,希望能帮助到大家 <insert id="insertRoleFunction" parameterType="java.util.List"> insert into CAF_ROLEFUNCTION ( ID, FUNCTION_ID, ROLE_ID) select SEQ_CAF_ROLE_FUNCTION.Nextval, A.* FROM ( <foreach collection="list" item="item" index="index" separator="UNION ALL"> <![CDATA[ SELECT #{item.functionId,jdbcType=DECIMAL}, #{item.roleId,jdbcType=DECIMAL} FROM dual ]]> </foreach> ) A </insert> 记得要加上 <![CDATA[]]> 传入的是list,list中有多个RoleFunctionEo对象 Mapper.java代码如下 void insertRoleFunction(List<RoleFunctionEo> list);

Java内部类与常用类

我怕爱的太早我们不能终老 提交于 2020-02-28 03:41:03
@Java 内部类与常用类知识模板 大家好,我是Ziph! 今天分享下面内部类与常用类的知识内容。 结合思维导图学习效果更佳!点击下方链接进入 Java内部类与常用类思维导图 一、内部类 内部类的分类 成员内部类 静态内部类 局部内部类 匿名内部类 什么是内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类的私有成员,而不破坏封装 可为外部类提供必要的内部功能组件 成员内部类 在类的内部定义,与实现变量、实例方法同级别的类 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象 Outer out = new Outer(); Inner in = out.new Inner(); 当外部类、内部类存在重名属性时,会优先访问内部类属性 成员内部类不能定义静态成员 静态内部类 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员 只能直接访问外部类的静态成员(实例成员需实例化外部类对象) Outer.Inner inner = new Outer.Inner(); Outer.Inner.show(); 局部内部类 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法 局部内部类访问外部类当前方法中的局部变量时,因无法保证变量的声明周期与自身相同,变量必须修饰为final 限制类的使用范围 匿名内部类