很早之前, 记得一次面试, 面试官问存储金钱用什么数据类型? 当时只知道8种数据类型(boolean, byte, short, int, long, float, double, char)的我, 回答了double, 因为我觉得double是双精度类型, 最适合, 但是面试官告诉我应该用BigDecimal! 最近在做支付的项目, 才对这种数据类型有了更多的了解.

栗子

请看题:

示例1

问, 结果是多少? 0.01?

No! 结果是0.009999999999999998!

为什么会这样呢? 因为float和double都是浮点数, 都有取值范围, 都有精度范围. 浮点数与通常使用的小数不同, 使用中, 往往难以确定. 常见的问题是定义了一个浮点数, 经过一系列的计算, 它本来应该等于某个确定值, 但实际上并不是! 金额必须是完全精确的计算, 故不能使用double或者float, 而应该采用java.math.BigDecimal.

加减乘除

两个BigDecimal值应该怎样进行加减乘除呢? +, -, *, / 这样写吗? 不!

请看示例:

示例2

加减乘除使用了英文的加减乘除, 即add, substract, multiply和divide

大小比较

两个BigDecimal值怎么比较大小呢? 能用>或者

示例3

两个BigDecimal值比较使用compareTo方法, 比较结果有-1, 0, 1, 分别表示小于, 等于, 大于; 对于0, 可以使用BigDecimal.ZERO表示!

小数位数及四舍五入规则

在项目中, 涉及到税费的计算, 计算的结果可能是小数点后面十几位, 那么怎么进行结算呢? 这就需要四舍五入这种东东了.

示例4

其中setScale的第一个参数是小数位数, 这个示例是保留2位小数, 后面是四舍五入规则.

mysql数据库设计

BigDecimal在进行入库时, 数据库选择decimal类型, 长度可以自定义, 如18; 小数点我们项目中用的是2, 保留2位小数. 此外还要注意的就是默认值, 一定写成0.00, 不要用默认的NULL, 否则在进行加减排序等操作时, 会带来转换的麻烦!

`balance` decimal(18,2) DEFAULT '0.00' COMMENT '账户余额',

java金额类型_Java中存储金额用什么数据类型?相关推荐

  1. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  2. java记录类型_Java中的记录类型

    java记录类型 于2020年3月发布的JDK 14引入了记录 (预览语言功能),该记录提供了一种紧凑的语法来声明主要用于保存数据的类. 在记录中 ,所有低级,重复且容易出错的代码都类似于构造函数,访 ...

  3. java 判断类型_Java中类型判断的几种方式

    在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式.拉勾IT课小编为大家提供java种类型判断方式. instanceof instanceof是Ja ...

  4. java判断类型_Java中类型判断的几种方式

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  5. java string类型_java中String类型

    String类型是字符串类型..字符串一旦创建不可以在改变."abc"字符串对象一旦创建,不可以再改成"abcd" 提升字符串的访问效率:在程序中使用了&quo ...

  6. Java+包裹类型_java中的包裹类型

    包裹类型将一个基本数据类型的数据转换成对象的形式,从而使得它们可以像对象一样参与运算和传递.下表列出了基本数据类型所对应的包裹类型: 基本类型    包裹类型 boolean    Boolean c ...

  7. java main类型_java中main方法的返回类型是?

    感谢邀请.man方法是void类型,void没有返回值类型 在java语言程序编写时都会涉及到一个main方法,它的格式为: public static void main(String[] args ...

  8. java特殊类型_java中如何查找某个特定类型作为形参的方法

    import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; im ...

  9. java中描述价格_JAVA中价格金额的存储类型

    标签:pre   等于   pac   额的   pack   应该   multi   tip   sub 在java项目中,我们会遇到价格.金额的数据,这时候我们java中应该用BigDecima ...

最新文章

  1. 在内部局域网(无外网)使用阿里云短信
  2. wider face data 在 faster rcnn 上的实践记录(caffe)
  3. pandas 如何判断指定列是否(全部)为NaN(空值)
  4. 消息中间件NetMQ结合Protobuf简介
  5. swfheader 0.10 Released(已更正下载地址)
  6. No slave process to process jobs, aborting 报错!!!
  7. linux .forward,linux forward的实现
  8. usb扩展坞同时接键盘鼠标_笔记本扩展伴侣,轻松解决接口烦恼,毕亚兹USB-C扩展坞体验...
  9. 信息学奥赛一本通(2018:【例4.3】输出奇偶数之和)
  10. 解决string字符串关于copy函数的C4996错误
  11. 彻底解决 Gson 将 int 转换为 double 的问题
  12. 广联达报错access_广联达土建算量软件错误提示大全及解决方法(持续更新至20170418)...
  13. Java五子棋书,本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下package gyb.exam; import java.awt.Bo...
  14. 短网址还原 php,php简单实现短网址(短链)还原的方法(测试可用)
  15. linux 设置开机自启动 文件配置开机自启动命令
  16. 计算机领域的诺贝尔奖是图灵奖,计算机界诺贝尔奖“图灵奖”,由3名人工智能深度学习领域的先驱共同获得...
  17. 前端视角漫谈百度ueditor编辑器前后端分离配置
  18. SVN管理工具Cornerstone之:创建分支、提交合并
  19. 专业的计算机软件著作权,大仙们谁能赐教 专业计算机软件著作权费用是多少,计算机软件著作权排名怎么样大家来说说?_天涯问答_天涯社区...
  20. 亲身经历3家1000人互联网公司,分享 25 条潜规则!

热门文章

  1. Coolite Toolkit入门指南
  2. Java多线程复习_Java多线程复习
  3. linux 内核驱动的名字,Linux内核驱动的的platform机制
  4. python绘制三维地形_【学习笔记】Python科学计算三维可视化(黄天羽、嵩天)(学习中。。)|python基础教程|python入门|python教程...
  5. vld检测不输出_输出轴热处理形变超差,找找原因
  6. matlab vision工具箱使用手册,matlab-Computer Vision System ToolBox的系统对象使用
  7. spring事务三大接口
  8. 对不起,你那不叫努力,叫重复劳动
  9. readkeyboard方法_Linux笔记(12)| 几种并发式IO的实现方法
  10. linux内核设计与实现 中文第三版 pdf_大牛推荐的5本 Linux 经典必读书