MySQL中 :

精度类型用DECIMAL来保留准确的精度类型,对于常用的货币数据,钱~

column_name   DECIMAL(P, D);

P为有效数字的精度,D为小数点后的位数~

D不写默认是0,P不写默认是10,那么就成这样了~     column_name DECIMAL;

Java中:

那么在数据库中存完了,接着就是取数据了~

开发中我们如果直接拿过来用的话那绝对就会出错了

System.out.println((1.01 + 2.02) == 3.03 );
System.out.println(new Float(1.01 + 2.02).equals(3.03) );
System.out.println(new Float(1.01 + 2.02) == (3.03) );
System.out.println(new Float(1.01 + 2.02) == new Float(3.03) );

以上结果都是错~, 并不是等于3.03,实际上输出的是3.0300000002,无论是float还是double浮点数,都会失去精度,所以要用到BigDecimal了

创建BigDecimal主要两种方法:

BigDecimal b1 = new BigDecimal("1.34");//1.34
BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34  

而直接new的话,会丢失精度

BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625 

除了上述两种,特殊的0, 1, 10可以写成:

BigDecimal zero = BigDecimal.ZERO;
BigDecimal one = BigDecimal.ONE;
BigDecimal ten = BigDecimal.TEN;  

比较一下BigDecimal.ZERO、new BigDecimal("0")、BigDecimal.valueOf(0)这三者,equals都是true,==的话new BigDecimal("0")就不用看了都new了,而BigDecimal.ZERO == BigDecimal.ZERO为true。

查看源码知道:10以内的对象都是同一个。

关于加减乘除

public static double add(double value1,double value2){  BigDecimal b1 = new BigDecimal(Double.toString(value1));  BigDecimal b2 = new BigDecimal(Double.toString(value2));  return b1.add(b2).doubleValue();
}  

BigDecimal的运算都没有对原值进行操作, 而是返回一个新的BigDecimal对象,这点可能有些小伙伴会搞错要注意一下。

补充:
doubleValue方法:BigDecimal转double

decimal与BigDecimal用法相关推荐

  1. BigDecimal用法介绍

    一.简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...

  2. BigDecimal用法详解

    BigDecimal用法详解 一.BigDecimal介绍 用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处 ...

  3. BigDecimal用法

    BigDecimal 为什么使用BigDecimal 由于浮点数采用二进制系统表示,而二进制无法精确的表示1/10,好比十进制无法精确表示1/3一样.因此,对于很多值浮点数都是采用其能够表示的离目标值 ...

  4. BigDecimal用法之计算等额本金和等额本息

    一.引言 <EffactiveJava>中介绍float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算 ...

  5. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  6. java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测)

    Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...

  7. python compare()_Python Decimal compare()用法及代码示例

    Decimal#compare():compare()是一个Decimal类方法,它比较两个Decimal值. 用法:Decimal.compare() 参数:十进制值 返回: 1 –如果a> ...

  8. Java如何转换protobuf-net中的bcl.Decimal对象

    参考文章:http://www.cnblogs.com/cuyt/p/6141723.html 公司内部有些C#服务使用proto-net,引入了bcl.proto中的bcl.Decimal.bcl. ...

  9. BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary

    BigDecimal类setScale方法问题:算数异常,精确度丢失-ArithmeticException: Rounding necessary 在运行如下代码时, package BigDeci ...

最新文章

  1. unity_小功能实现(敌人巡逻功能)
  2. EclipseLink JPA-RS简介
  3. Oracle 数据库的子查询(关联子查询)
  4. java see 方法_Java 反射常用方法
  5. iOS设置拍照retake和use按钮为中文简体
  6. 并查集的补集 (关押罪犯)
  7. linux如何结束音乐是什么函数,与音乐有关的linux命令
  8. ubuntu 安装java插件_Ubuntu下安装JAVA插件欣赏精美网页
  9. 招聘人才的网站(杭州)
  10. 通达OA2017版连接sqlserver2008数据库
  11. 解决win10系统alt+tab切换程序不显示程序缩略图问题
  12. 服务器 cpu 修改vt,虚拟机安装mac必看:Intel CPU虚拟技术VT-x支持列表
  13. 小时候读不懂鲁迅笔下的闰土,人到中年才知道,自己其实就是闰土
  14. 2021年化工自动化控制仪表考试内容及化工自动化控制仪表作业考试题库
  15. smartbi v7 Linux,安装Smartbi
  16. Linux 30岁啦,这些历史你知道多少呢?
  17. 给图片加水印的简单方法,手机图片加水印也可以用
  18. idea打不开,双击没反应的解决方案
  19. 计算机工程系的文化是什么,计算机工程系科技文化节.doc
  20. ubuntu 20.04 编译Android9.0的android源码

热门文章

  1. Javascript权威指南看书笔记
  2. 试析高校变配电室电力监控系统的设计与实现
  3. redisearch+redisJSON联合使用
  4. 2021全球城市500强非洲上榜城市排行榜:南非6个城市上榜,其中2个跻身总榜百强(附年榜TOP35详单)
  5. 【计算机组成原理】CPU中断系统
  6. 彻底关闭windows10的更新功能
  7. 经典正交多项式介绍及其应用
  8. 飞机订票系统c语言大作业,c语言课程设计---飞机订票系统
  9. Thinkphp使用Validate里的正则表达式验证中文名字和身份证号码
  10. 解除win7网络限速.