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。

参考文献:

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

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

相关文章

期望

把原来一些关于软件工程,教学,和程序设计相关的博客搬过来。 [http://yishan.cc/blogs/xin/archive/2009/04/12/1058.aspx] 学校的期望 我在BBS 看到有人感慨说- 有家长让小孩在大学里专心学习,不要想别的。等到一毕业,就希望小孩…

java 数值变量_Java 中数值变量赋值问题

写了一段判断数值相等判断方法的程序://在-128~127 之外的数Integer i1 200;Integer i2 200;System.out.println("i1i2: "(i1i2));//false// 在-128~127 之内的数Integer i3 100;Integer i4 100;System.out.println("i3i4: "(i3i4));//true…

软件教育随想

[由于工作的关系,我在过去的几年中访问了十二三所软件学院/计算机学院,和不少老师,学生座谈过。我在研究院里也碰到了不少各个学校来的学生,谈得多了,就有下面的随想。] 想来的人来不了 学校里都是按照高考/考研的成绩…

java获取当前电脑的ip_使用Java获取当前计算机的IP地址

问题我正在尝试开发一个系统,其中有不同的节点在不同的系统上或在同一系统上的不同端口上运行。现在所有节点都创建一个Socket,其目标IP作为称为自举节点的特殊节点的IP。然后节点创建自己的ServerSocket并开始侦听连接。引导节点维护一个节点列表&#…

两千块钱带来的 希望

几年以前,我参加过一个全国 “软件学院” 的评审,得到两千块现金和一些希望。我后来把钱和希望都还给同学们了,现在说明一下。 [这是个人回忆,不代表任何组织,也不确保所有信息的完全准确] 我先…

java 内部变量_java 中的内置数据类型

1, 基本数据类型Java是强类型语言, 对于每一种数据都定义了类型,基本数据类型分为数值型,字符型,布尔型。数值型又分为了整型和浮点型。整型又分为byte, int, short long.浮点型又分为了float 和double.字符型是char 类型&#x…

DG导入mysql依赖包_MySql导入导出数据库(含远程导入导出)

1、先运行cmd,cd 到mysql安装目录中的bin文件夹2、mysqldump -u root -p 数据库名 > 导出文件名.sql其他情况下:1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql2.导出一个表m…

java线程的优点_Java使用多线程的优势

Java使用多线程的优势如果使用得当,线程可以有效地降低程序的开发和维护等成本,同时提升复杂应用程序的性能。那么Java使用多线程的优势具体有哪些呢,一起来了解一下!1、发挥多处理器的强大能力现在,多处理器系统正日益盛行&#…

开发软件不是闭卷考试

有人问我这个问题: “你正在做一个项目,这个项目有一项关键的feature需要实现,这个feature有一定的技术难度,你调试了很久,都没找到实现的途径,这时你已经在这个feature上花了很多时间了,而且无…

go语言mysql删除记录_MySQL数据库删除操作-Go语言中文社区

删除数据库DROP DATABASE [IF EXISTS] 数据库名;例如:删除school数据库IF EXISTS 为可选,判断是否存在,如果不存在则会抛出异常删除数据表DROP TABLE [IF EXISTS] 表名;例如:删除student表注意:删除具有主外键关系的表…

java csv下载_java 生成csv文件,弹出下载对话框。。。

1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。2.在服务器端把文件转换成输出流,写…

中科大在50年代的教学理念

给中科大的学生上课, 得了解这个学校的教学理念,我从网上找到了一篇: 中国科学技术大学里的基础课中国科学技术大学力学和力学工程系系主任 钱学森中国科学技术大学是为我国培养尖端科学研究技术干部的,因此学生必需在学校里打下将来作研究工作的基础。…

软件工程 团队博客作业 如何评价个人在团队中的绩效

在现实社会中有很多团队合作的项目, 他们是如何评价个人在团队中的绩效呢? 例如下面的情况:•一群人把一堆砖头从A地搬到B地•一个剧组排演话剧•一群队员在职业球队踢球•医生和护士做手术•计算机系的一群老师教课•一群学生做软工项目 (PM, Dev, Test) (这是重点)如何衡量…

java中的位移运算符_java中的移位运算符(, , )

java中有3种移位运算符<>> : 右移运算符&#xff0c;不改变符号位&#xff0c;num >> n 表示二进制右移n位&#xff0c;结果相当于 num / (2的n次方)>>> : 无符号右移&#xff0c;长度扩展为4字节&#xff0c;最高位都为0&#xff0c;但正数扩展位补…

现代软件工程系列 软件 = 程序 + 软件工程

软件随想: 软件 程序 软件工程 最近和几个同道谈论了一些程序&#xff0c;架构&#xff0c;软件的问题&#xff0c;大家身在此山中&#xff0c;绕来绕去&#xff0c;始终没有能有明确清晰的结论。我把一些想法写在这里&#xff0c;供专家指正。 几乎所有程序员都知道“程序…

java 参数代替所有类_Java中的常用类

1 常用类NO13【Int Intergershort Shortbyte Bytedouble Doublefloat FloatBoolean BooleanChar Character】封装类都是引用类型&#xff0c;并且也具有对应基本数据类型的数学运算特征装箱&#xff1a;将基本数据类型的值装进封装类对象中去&#xff0c;也可以…

现代软件工程系列 学生和老师都不容易

老师的难处 - V2.0 的困难 有笑话说某人请客, 客人无论是坐轿或是步行前来, 主人都能奉承一番。 有客人说自己是爬着来的&#xff0c; 主人奉承说 - 稳妥之至! 据说有些学校的有些课还是沿用 N 年前的教案和教材, 这当然稳妥之至。我看到学校用很多年前的稳妥教材把学生…

现代软件工程系列 学生的精彩文章 (1)

讲了很多课, 碰到了很多学生, 他们教给我不少东西, 下面是一些我印象中的精彩文章: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!188.entry December 26“大教堂”与“市集” 软件项目的管理者总是无比艳羡传统行业&#xff0c;无论是工业的流水线还是…

jpa mysql存储过程_(原)springbootjpa调用服务器mysql数据库的存储过程方法-Go语言中文社区...

一、springboot jpa项目文件配置#----------------------------------------------------------###########################################################datasource 配置MYSQL数据源&#xff1b;########################################################## 数据库sprin…

现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心...

from: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!222.entry 感想 平常心 初中的数学老师常常和我说&#xff1a;“你要学会保持一颗平常心”。我是一个不那么豁达开朗的人&#xff0c;对很多事情都会很看重&#xff0c;GPA&#xff0c;排名&#x…