MySQL及Java中如何保证数值计算的精度
⼀. MySQL中如何保证数值精度
在MySQL数据库中使⽤decimal类型的字段存储数值类型
column_name decimal(P,D);
D:代表⼩数点后的位数
P:有效数字位数。⼩数点也算⼀位。
例⼦
CREATE TABLE`test_decimal`(
`id`int(11)NOT NULL,
`amount`decimal(10,2)NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8
⼆. Java中使⽤BigDecimal
使⽤BigDecimal类可以很好的保证数值精度。
三. 整合应⽤
1. DAO
@Repository
public interface TestDecimalDao {
@Select("select * from test_decimal where id = #{id}")
TestDecimal getTestDecimal(int id);
bigdecimal除法保留小数}
2. 测试类
public class TestDecimalDaoTest extends BaseTest {
@Resource
private TestDecimalDao testDecimalDao;
@Test
public void test(){
TestDecimal testDecimal1 = TestDecimal(1);
TestDecimal testDecimal2 = TestDecimal(2);
BigDecimal result = Amount().Amount());
System.out.println(result.floatValue());
}
}
说明:
将jdbcType为decimal的数据转化为javaType为BigDecimal类型的数据。
使⽤decimal存储类型的缺点
1、占⽤存储空间。
浮点类型在存储同样范围的值时,通常⽐decimal使⽤更少的空间
2、使⽤decimal计算效率不⾼
因为使⽤decimal时间和空间开销较⼤,选⽤int作为数据库存储格式⽐较合适,可以同时避免浮点存储计算的不精确和decimal的缺点。对于存储数值较⼤或者保留⼩数较多的数字,数据库存储结构可以选择bigint。
参考⽂献:
作者:何甜甜在吗
juejin.im/post/5c08db5ff265da611e4d7417
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论