java钱_在Java中如何表示钱Money?
为什么不使用float / double?
使用java时会遇到money类型的选择问题,首先想到的是float / double。如果只是简单的货币计算,很难发现用float会有问题。出现问题的原因是使用float / double(已经相应的包装类Float / Double)会出现舍入误差(rounding errors),不能精确的表示十进制数。例如下面的例子:
1 public class countMoney {
2 public static void main(String[] args) {
3 float m1 = 0.1f;
4 float m2 = 9.0f;
5 System.out.println(mulMoney(m1, m2));
6 }
7
8 private static float mulMoney(float m1, float m2) {
9 return m1 * m2;
10 }
11 }
结果输出0.90000004,而不是0.9。十进制数0.1用二进制存储,被表示的值为0.0999999999999999996。所以得到的结果并不是预期的0.9。
怎样表示money?
使用BigDecimal来表示货币。现在来重新实现这个例子:
1 public class countMoney {
2 public static void main(String[] args) {
3 BigDecimal m1 = new BigDecimal("0.1");
4 BigDecimal m2 = new BigDecimal("9.0");
5 System.out.println(mulMoney(m1, m2));
6 }
7
8 private static BigDecimal mulMoney(BigDecimal m1, BigDecimal m2) {
9 return m1.multiply(m2);
10 }
11 }
输出0.90。
BigDecimal可表示任意精度的小数,不管它的范围有多大。BigDecimal是用array来存储数字的,每一次输入表示一个数字。因此,BigDecimal可以表示任意大小的数。
另外,BigDecimal是一个类,不是基本类型,需要调用方法来实现数的运算。它有四中方法:add, subtract, multiply, 和 divide。这里m1和m2相乘采用了multiply。
表示money的其他方法?
用currency可表示世界货币。
使用int / long表示penny。
参考文献:
java钱_在Java中如何表示钱Money?相关推荐
- linux java 栈_关于Java中栈与堆的思考
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...
- Java多线程_复习(更新中!!)
java多线程的常见例子 一.相关知识: Java多线程程序设计到的知识: (一)对同一个数量进行操作 (二)对同一个对象进行操作 (三)回调方法使用 (四)线程同步,死锁问题 (五)线程通信 等等 ...
- js 中 java 代码_在js中嵌套java代码
jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...
- java 企业版_下列版本中哪个是Java 企业版
下列版本中哪个是Java 企业版 2021-02-07 下列版本中哪个是Java 企业版 张爱玲评价自己的服饰:"仿佛穿着博物院的()到处走,遍体森森然飘飘欲仙".转动惯量是刚体转 ...
- jython 导入java包_在jython中导入java类
我用python处理NLP.有一个NLP工具,即Zemberek,用于土耳其语.但它是用java编写的.所以我必须使用jython来导入这些类.我安装了Jython2.7.另外,我安装了eclipse ...
- 修改docker内java内存_在docker中使用java的内存情况
Java和Docker不是天然的朋友. Docker可以设置内存和CPU限制,而Java不能自动检测到.使用Java的Xmx标识(繁琐/重复)或新的实验性JVM标识,我们可以解决这个问题. 虚拟化中的 ...
- 沈阳5年java月薪多少钱_沈阳java工资怎么样,沈阳java工资很高吗,沈阳java工资水平如何...
沈阳java工资怎么样,沈阳java工资很高吗,沈阳java工资水平如何 首页 > java > 沈阳java工资怎么样 作者:镀金池 发布时间:2018-12-02 05:40 Ju ...
- 谷歌去水印java实现_在Java中实现Google的“您的意思是”功能
谷歌去水印java实现 介绍 搜索引擎用户经常因各种原因而拼写错误的搜索词,包括键盘问题(键不起作用),陌生的国际名称(例如Sigmund Freud),意外更改一个字母(Sinpsons)或添加一个 ...
- java地区_在Java中存储国家/地区代码,名称和Continent的最佳方式
在ISO 3166中有246个国家,你可能会在此背后得到一个继电器大枚举.我更喜欢使用包含国家/地区列表的 XML文件,您可以从 http://www.iso.org/下载一个并加载它们(例如,当应用 ...
- java 抛物线_关于java中模拟抛物线轨迹的问题
展开全部 看了这套题目感觉很有兴趣,就花了一e69da5e6ba903231313335323631343130323136353331333264623831个中午亲手给你写了一个类似的例子,相信可 ...
最新文章
- 中国人工智能AI框架自主研发
- linux 的一个防火墙策略
- 转】用Maven构建Mahout项目
- win7中安装mysql_windows7下安装Mysql5.6数据库图文教程(压缩包安装)
- spring 获取 WebApplicationContext的几种方法
- 宠了4年的老婆,说走就走,没有一点情份,你会怎么做
- 千寻和省cors精度对比_使用中海达RTK实战演示千寻cors账号对比省cors网络,验证其测量效果究竟如何...
- vv7无法启动显示发动机故障_点火系统故障引起发动机不能启动的排除方法
- c语言从1加到任意数的编程,c语言:从键盘任意输入一个整数n,编程计算并输出1-n之间的所有素数之和...
- linux连不上网 ens33,如何解决Linux 系统下 ifconfig 命令无网络接口 ens33
- NoticeBoard 一个仿原生UI的消息通知控件
- [转载] Python开发系列课程(16) - 进程和线程
- Java日常干货-观察者模式
- 频谱感知4:CCS硬合并中m-out-of-K准则下m与K的联合优化问题
- Linux 网桥 brctl
- CA/B论坛又出新动作了!代码签名证书最小密钥长度将于6月增强至3072位
- 全志F1C200S F1C100S 介绍
- iOS 12.0-12.1.2 完整越狱教程
- 睡眠十律 (BBC纪录片) -- 讲述10分钟获得好睡眠的方法
- 虾皮台湾店标价是用台币吗?要如何定价?
热门文章
- 如何把我的Java程序变成exe文件?
- [转帖]FPGA--Vivado
- 【分享】关于对象关系映射的理解
- ASP.NET MVC: 构建不带 Web 窗体的 Web 应用程序(转载)
- 爬取Github Web API 并存入Mysql数据库
- 获取axios的return值
- Leetoce--572. 另一个树的子树(java)
- MYSQL--一条SQL查询语句是如何执行的?
- android 监测bug上传到服务器,基于Android 错误信息捕获发送至服务器的详解
- VS2013报错:错误:没有与这些操作匹配的《运算符