其他
用 float 存储金额,老板说损失从工资里扣!
点击上方“Java之间”,选择“置顶或者星标”
你关注的就是我关心的!
你关注的就是我关心的!
来源:juejin.im/post/5c08db5ff265da611e4d7417
为什么不能使用float存储金额
public class FloatTest {
public static void main(String[] args) {
float f1 = 6.6f;
float f2 = 1.3f;
System.out.println(f1 + f2);
}
}
从计算机二进制角度计算 6.6 + 1.3 的过程
float底层存储
二进制的转化
整数部分的计算:6转化为二进制
小数部分的计算
0.6转化为二进制
规约化
指数偏移值
拼接6.6
求和
不能使用float那用什么类型存储金额?
column_name decimal(P,D);
CREATE TABLE `test_decimal` (
`id` int(11) NOT NULL,
`amount` decimal(10,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
/**
* @description dao层
*
* @author JoyHe
* @date 2018/11/05
* @version 1.0
*/
@Repository
public interface TestDecimalDao {
@Select("select * from test_decimal where id = #{id}")
TestDecimal getTestDecimal(int id);
}
/**
* @description 测试类
*
* @author JoyHe
* @date 2018/11/05
* @version 1.0
*/
public class TestDecimalDaoTest extends BaseTest {
@Resource
private TestDecimalDao testDecimalDao;
@Test
public void test() {
TestDecimal testDecimal1 = testDecimalDao.getTestDecimal(1);
TestDecimal testDecimal2 = testDecimalDao.getTestDecimal(2);
BigDecimal result = testDecimal1.getAmount().add(testDecimal2.getAmount());
System.out.println(result.floatValue());
}
}