一. MySQL的decimal类型
MySQL数据库具有decimal类型。
` product _ price ` decimal (8,2 ) NOT NULL COMMENT (单价) ',
decimal (8,2 )其中,8表示有效位数,即整数小数共有8位以下,2表示保留两个小数。 e cimal (8,2 )表示数值共有8位,其中6位整数、2位小数。
例: decimal (2,1 )这种情况下,插入数据“12.3”、“12”等时会发生“数据溢出错误”的异常; 插入1.23或1.2345 .会自动舍入为1.2。 插入"2"会自动添加到" 2.0 "中,以确保包含1位小数的2位有效长度。
数据库中的医学类型。 Java使用BigDecimal进行接收。
这次,主要谈的是Java的BigDecimal。
二. Java的BigDecimal类型
1、介绍
引用http://www.cn blogs.com/chens sy/archive/2012/09/09/2677279.html的例子:
公共类测试{
publicstaticvoidmain (字符串[ ] args ) {
系统. out.println (0. 060.01;
system.out.println(1.0-0.42;
system.out.println(4.015*100;
system.out.println(303.1/1000;
}
}
输出结果:
0.069999999999
0.5800000000000000001
401.49999999999994
0.303100000000000004
我认为你错了,结果是这样的。 问题在哪里? 因为我们的计算机是二进制的。 浮点数不能用二进制形式准确表示。 我们的CPU显示浮点数由指数和尾数两部分组成。 这种表示方法一般会失去一定的精度,一些浮点数运算也会产生一定的误差。 例如,2.4的二进制表示不是准确的2.4。 反而最近的二进制显示为2.3999999999999999。 浮点数值实际上是通过特定的公式计算的。
实际上,java的float只用于科学计算和工程计算,很多商业计算一般使用java.math.BigDecimal类进行准确的计算。
以前老师也说过,涉及金额、准确计算的都在数据库中使用decimal类型,对应的Java中是BigDecimal类型。
2、结构方法
BigDecimal有几种常用的结构方法
bigdecimal bignum1=new bigdecimal (' 3.4 );
bigdecimal bignum2=new bigdecimal (3;
BigDecimal bignum3=null;
3、BigDecimal加减乘除
//加法
bignum3=bignum1.add(bignum2);
System.out.println (是指(bignum3);
//减法
bignum3=bignum1. subtract (bignum2);
System.out.println (差为' bignum3);
//乘法
bignum3=bignum1. multiply (bignum2);
System.out.println ('乘积为' bignum3);
//除法
bignum3=bignum1. divide (bignum 2,3 ); //精确到3位小数
System.out.println ()商为(bignum3);
除法有两个参数。 否则,可能会发生错误。
Java.lang.arithmetic exception : non-terminatingdecimalexpansion; no exact representable decimal res
如果无法整除而出现无限循环小数,就会抛出异常。
因此,第二个参数是设置精确的小数点。 例如,divide (xxxxx
、2 )。