金钱货币用什么类型--(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的常用方法
金钱货币用什么类型--(Java)的更多相关文章
- java:警告:[unchecked] 对作为普通类型 java.util.HashMap 的成员的put(K,V) 的调用未经检查
java:警告:[unchecked] 对作为普通类型 java.util.HashMap 的成员的put(K,V) 的调用未经检查 一.问题:学习HashMap时候,我做了这样一个程序: impor ...
- 货币金额的计算 - Java中的BigDecimal
在<Effective Java>这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal.,而且使 ...
- Java中String转换Double类型 Java小数点后留两位
Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.to ...
- JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String
参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ...
- Android的4种文件类型Java,class,dex,apk
Java文件-----应用程序源文件 Android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的),android的应用必须使用java来开发 Class文件- ...
- PHP领域类型Java中ibatis的API
最近公司技术调整,要把java用php换掉,其中java主要的工作就是查询数据库,并返回json,ORM用的是ibatis,主要用到了Object映射和动态SQL,组员们用的都挺6,转到PHP后,发现 ...
- eclipse 项目资源与 java 编译器级别不致总是;说明资源路径位置类型Java编译器级别不匹配t
问题:Description Resource Path Location Type Java compiler level does not match t 今天在自己项目中整合HBase API的 ...
- Android开发之 当前日期String类型转date类型 java代码中实现方法
/** * 获取当前时间 * * @return */ public Date getDate(String str) { try { java.text.SimpleDateFormat forma ...
- HttpClient get返回String类型 JAVA
public static String httpGet(String url) { // get请求返回结果 String strResult = ""; try { Defau ...
随机推荐
- django 前后台传递数据
前几天,我们完成了用django orm对数据进行操作.接下来,我们要把数据从后台放到前台. 1.用get方式传值 get:就是在URL拼接字符串,在后台,用request.get方式取 2.用pos ...
- 分享一本Java并发编程的免费好书
最近当当的大促销又开始了,估计很多人脑子一热,又花钱囤了不少技术书吧. 在我看来大部分程序员买技术书的用途(以下排名按用途从大到小): 让领导.同事看见,你看我多爱学习: 给自己一个心理安慰,我还没废 ...
- 多线程高并发编程(3) -- ReentrantLock源码分析AQS
背景: AbstractQueuedSynchronizer(AQS) public abstract class AbstractQueuedSynchronizer extends Abstrac ...
- CKEDITOR (FCKEDITOR) --- 目前最优秀的可见即可得网页编辑器之一
FCKEDITOR 编辑 同义词 CKEditor一般指FCKEDITOR FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写.具备功能强大.配置容易.跨浏览器. ...
- 表字段或表名出现Mysql关键字或保留字导致问题 Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have
MySQL 5.7使用的关键字和保留字 https://dev.mysql.com/doc/refman/5.7/en/keywords.html 当我们建表的时候如果使用了关键字或者保留字,则在执行 ...
- python 异步 I/O
如果你想了解异步编程,那么必然会涉及出许多相关概念. 堵塞/非堵塞 同步/异步 多进程/多线程/协程 为什么我要学习这个话,因为我想搞懂异步框架和异步接口的调用.所以,我的学习路线是这样的: 1.py ...
- Epicor RoHS Overview
Epicor ERP具有一个旨在帮助符合指令2002/95/EC (RoHS1) and 2011/65/EU (RoHS2)的模块,特别适用于医疗设备公司. 不合格的依据是–最大浓度值和合格声明/ ...
- 排序1 - 选择排序 & 插入排序
请原谅我没有按照之前图片的分类来介绍排序算法,先说最简单的两种排序算法(冒泡略过),选择排序和插入排序,之前老是容易记混.默认输出升序的序列啊,哈哈. 选择排序 对于输入长度为n的数组,一共比较n-1 ...
- Python代码覆盖率分析工具Coverage
简介 在测试中,为了度量产品质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具当属Coverage.代码覆盖率是由特定的测试套件覆盖被测源代码的程度来度量,Co ...
- 解决linux(ubuntu18)下无法挂载ntfs磁盘,并读写挂载硬盘
首先需要有ntfs-3g,没有的话sudo apt-get install ntfs-3g 挂载硬盘: chen@ilaptop:/$ sudo mount -o rw,remount /dev/sd ...