金钱货币用什么类型--(Java)

0、前言

  项目中,基本上都会涉及到金钱;那么金钱用什么数据类型存储呢?

  不少新人都会认为用double,因为它是双精度类型啊,或者float,

  其实,float和double都是不能用来表示精确的类型的,也就是说金钱是万万不能用float和double来存储的!

1、why?

先来个例子:

你猜猜输出是什么,0.01?NO,请看:

  为什么会这样呢?

   因为float和double都是浮点数, 都有取值范围, 都有精度范围. 浮点数与通常使用的小数不同, 使用中, 往往难以确定.

  常见的问题是定义了一个浮点数, 经过一系列的计算, 它本来应该等于某个确定值, 但实际上并不是!

  所以说,float和double都是不能用来表示精确的类型的;

  金额必须是完全精确的计算, 故不能使用double或者float, 而应该采用java.math.BigDecimal.

2、结论

  float和double都是不能用来表示精确的类型的,也就是说金钱是万万不能用float和double来存储的!

  金钱应该采用java.math.BigDecimal存储;

  MYSQL数据库选择decimal类型,注意默认值 一定写成0.00, 不要用默认的NULL, 否则在进行加减排序等操作时, 会带来转换的麻烦!

3、BigDecimal的常用方法

 

 

原文地址:https://www.cnblogs.com/yanghj/p/12834423.html