java金额类型_Java中存储金额用什么数据类型?

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

栗子

请看题:

430c7f5a126b02ba041d0b85fe0423ce.png

示例1

问, 结果是多少? 0.01?

No! 结果是0.009999999999999998!

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

加减乘除

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

请看示例:

5f58a0d4dee583b13912ed24a717acad.png

示例2

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

大小比较

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

432ae4e3ee25ef45daa1a7e2e4e6f70b.png

示例3

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

小数位数及四舍五入规则

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

41bd15c1913cfd94b1a0f236ed168f5f.png

示例4

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

mysql数据库设计

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Hooks 不知道怎么学?看这篇

大家好,我是若川。最近跟朋友聊技术,发现越来越多的大厂,都优先考虑用 React 做项目,在面试中也经常会考察对 React Hooks 的理解。其实,我一直觉得,React 才是前端的正确打开方式。当然,并不是…

ui原型设计工具_UI设计师的工具包,用于专业模型,原型和产品插图

ui原型设计工具This is a followup to my previous article 这是我上一篇文章的后续 visual tools for UX Designers视觉工具Tools don’t make designs better– you do! It doesn’t matter if you paid a lot of money for the latest software, or if you simply have a p…

前端 Offer 提速:如何写出有亮点的简历

大家好,我是若川。今天推荐一篇8年工作经验字节大佬的文章,如何写出有亮点的简历。可以收藏常看。点击下方卡片关注我、加个星标。学习源码整体架构系列、年度总结、JS基础系列先来个灵魂拷问:「你与他人相比,有什么能形成明显区分…

2008中的membership profile操作(转)

<profile > <properties> <add name"jimmy" /> </< span>properties> </< span>profile> 然后就那么简单,后台就能通过Profile拿到: Profile.jimmy "Pumpkin Ravioli"; 然后~通过这种方式就跟Session一样&a…

css网格_一个CSS网格可以全部统治

css网格The case for using one CSS grid for your entire website在整个网站上使用一个CSS网格的情况 CSS网格与Flexbox (CSS Grid vs Flexbox) In the dark ages, we used table, a few years ago we used float and before today most of us used flex . Of course, these …

java 高级泛型_Java 泛型高级

1、限制泛型可用类型在定义泛型类别时&#xff0c;预设可以使用任何的类型来实例化泛型中的类型&#xff0c;但是如果想要限制使用泛型的类别时&#xff0c;只能用某个特定类型或者其子类型才能实例化该类型时&#xff0c;使用extends关键字指定这个类型必须是继承某个类&#…

2021 年最值得使用的 Node.js 框架

大家好&#xff0c;我是若川。今天推荐一篇译文&#xff1a;2021年最值得使用nodejs框架&#xff0c;值得收藏&#xff0c;很快能看完。点击下方卡片关注我、加个星标。学习源码整体架构系列、年度总结、JS基础系列Node.js 是最敏捷的服务端 web 应用平台&#xff0c;因为它为应…

面试被拒绝如何争取_争取反馈

面试被拒绝如何争取Let me start by saying that Dribbble is awesome. I’ve been a member of the Dribbble community for years. I swoon over the beautiful design I see throughout the site. Dribbble is among the most popular places to go for inspiration and whi…

中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?

业务架构这个词大家时常听到&#xff0c;但是能解释得清楚的却不多&#xff0c;撩撩度娘&#xff0c;你就会发现&#xff0c;不少人问及业务架构和应用架构的关系&#xff0c;聊天时&#xff0c;也常有人问起业务架构师和产品经理什么区别&#xff1f;业务架构分析和需求分析什…

你对webpack了解多少?

大家好&#xff0c;我是若川。之前有一个朋友给我留言&#xff1a;自己目前在一家小厂工作&#xff0c;对webpack的使用比较熟悉&#xff0c;想要跳槽去大厂&#xff0c;但是纠结是否还需要深入学习webpack&#xff08;因为觉得学了也用不到&#xff0c;但又怕面试不通过&#…

纹理对象纹理单元纹理目标_网页设计理论:纹理

纹理对象纹理单元纹理目标Texture has become an indispensable element in web design. It is not only a trend but also a quick way to increase the depth of web pages. When designers learn to use textures, they can strengthen the appeal of web pages. It can be …

java dao层和base层_详解Javaee Dao层的抽取

有时候我们在实现不同功能的时候回看到很多的Dao层的增加、修改、删除、查找都很相似&#xff0c;修改我们将他们提取BaseDao一、提取前1. 提取前的LinkDao层&#xff1a;public interface LinkManDao {Integer findCount(DetachedCriteria detachedCriteria);List findByPage(…

畅销书《深入浅出Vue.js》作者,在阿里淘系1年的收获成长

大家好&#xff0c;我是若川。今天推荐一篇95年的博文的文章。他的故事应该挺多人知道。如果不知道可以看他的博客 https://github.com/berwin/blog点击下方卡片关注我、加个星标时间好快&#xff0c;眨眼间&#xff0c;加入阿里已经一年了。这一年发生了很多事&#xff0c;整体…

插图 引用 同一行两个插图_将图标变成插图的五个简单步骤

插图 引用 同一行两个插图Every creative person has probably already been in this situation: A project, be it a website, an app — or as far as I am concerned: often a news story would benefit from an appealing side visual. But neither budget nor time makes …

web登录界面设计_出色的Web界面设计的7条规则

web登录界面设计When you work on a website or on the design of web pages, remember that their success is not determined by the beauty of their visual style. In fact, in his article “10 Principles Of Good Website Design”, Vitaly Friedman stated:当您在网站或…

关于为什么我推荐大家看vue代码的随想

大家好&#xff0c;我是若川。今天给大家推荐一篇大圣老师在知乎的回答&#xff0c;很快能看完。我也曾经回答过这个问题。若川知乎高赞&#xff1a;有哪些必看的 JS 库&#xff1f;不要为了读源码而读源码&#xff0c;但要学会看源码。自己常用的熟悉的库的源码值得读读。点击…

算法 - 最好、最坏、平均复杂度

注&#xff1a;本文仅为笔记。 原文 极客时间 - 数据结构与算法之美 - 04 | 复杂度分析&#xff08;下&#xff09;&#xff1a;浅析最好、最坏、平均、均摊时间复杂度 最好、最坏时间复杂度 略&#xff0c;比较容易分析。 平均时间复杂度 需考虑概率来计算。 概率论中的加权平…

555的传说

郑昀 20101118 昨天听1039电台才知道&#xff0c;北美电影里常出现的555开头号码是行规惯例&#xff0c;因为当年贝尔系统为测试链路中所有交换机的基本功能&#xff0c;全部由5组成的号码&#xff08;555–5555&#xff09;作为特别的测试号码被保留&#xff0c;时至今日只剩下…

没想到你是这样的npm install

大家好&#xff0c;我是若川。今天给大家推荐一篇关于 npm install 的好文。很快能看完。点击下方卡片关注我、加个星标学习源码整体架构系列、年度总结、JS基础系列前言项目中执行npm install发生了什么&#xff0c;众所周知&#xff0c;执行npm install时会在当前项目目录的n…

Django——Model

一、 ORM 在 MVC 或者说 MTV 设计模式中&#xff0c;模型&#xff08;M&#xff09;代表对数据库的操作。那么如何操作数据库呢&#xff1f; 我们可以在 Python 代码中嵌入 SQL 语句。 但是问题又来了&#xff0c;Python 怎么连接数据库呢&#xff1f;可以使用类似 pymysql 这一…