公众号后台回复“面试”,获取精品学习资料

扫描下方二维码了解详情,试听课程

本文来源:
juejin.im/post/5c08db5ff265da611e4d7417
《Java工程师面试突击(第3季)》重磅升级,由原来的70讲增至160讲,内容扩充一倍多,升级部分内容请参见文末
为什么不能使用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());
}
}

使用decimal存储类型的缺点
END
《Java工程师面试突击第三季》加餐部分大纲:(注:1-66讲的大纲请扫描文末二维码,在课程详情页获取)



详细的课程内容,大家可以扫描下方二维码了解:

文章转载自石杉的架构笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




