在实际的应用当中 如果涉及到金钱之类的数据类型,一直想寻找一个合适的java数据类型来处理这方面的事情
前几天开了java解惑一本书,里面对很多平时不在意的一些细节做了详细的解惑。针对“小数详细计算”的解惑:
当我们用System.out.pritnln("3.00-2.10"):的时候 我们希望得到的是 “银行”应该给“客户”的利息9毛钱。即0.9元
。。但是如果让计算机来计算的时候,它就无形中吃掉你些许的money,也许实际你账户的利息值不到9毛,也许单个"客户" 不会在意,但是如果世界上所有的人都被这样吃了些许钱,那银行就赚大了。
呵呵,上面的计算出的结果不是 0.9,而是一连串的小数。问题在于2.1这个数字不能被精确表示为一个double,因此它被表示为最接近它的double值,该程序从3中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。
一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。
解决问题的第一种方式是使用货币的最小单位(分)来表示:将所有的大单位的钱都转换为分,就可以计算了,300-210=90(分)
第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用BigDecimal(double)来构造(
也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String
时精度已丢失)。例如new BigDecimal(0.1),它将返回一个BigDecimal,也即
0.1000000000000000055511151231257827021181583404541015625,正确使用BigDecimal,程序就可以打印出我们所期
望的结果0.9:
2.负的十六进制与八进制字面常量
“数字字面常量”的类型都是int型,而不管他们是几进制,所以“2147483648”、“0x180000000(十六进制,共33
位,所以超过了整数的取值范围)”字面常量是错误的,编译时会报超过int的取值范围了,所以要确定以long来表示
“2147483648L”、“0x180000000L”。
十进制字面常量只有一个特性,即所有的十进制字面常量都是正数,如果想写一个负的十进制,则需要在正的十进制
字面常量前加上“-”即可。
十六进制或八进制字面常量可就不一定是正数或负数,是正还是负,则要根据当前情况看:如果十六进制和八进制字
面常量的最高位被设置成了1,那么它们就是负数:
从上面可以看出,十六进制的字面常量表示的是int型,如果超过32位,则需要在后面加“L”,否则编译过不过。如
果为32,则为负int正数,超过32位,则为long型,但需明确指定为long。
分享到:
相关推荐
行业分类-设备装置-程序开发平台中数据类型查找属性的生成方法及装置.zip
C#应用程序开发
Java程序开发环境配置与简单Java程序开发 Java 基本数据类型与控制语句
首先讲述了构成Python语言的8个关键要素,之后分章节对其进行了详尽的阐述,包括数据类型、控制结构与函数、模块、文件处理、调试、进程与线程、网络、数据库、正则表达式、GUI程序设计等各个方面,并介绍了其他...
程序开发环境, 从键盘输入, 单行注释, 多行注释, 流程图, 程序调试, 变量, 声明及使用, 赋值运算符, 算术运算符, 关系运算符, 逻辑运算符, 其他运算符, 优先级, 数据类型, 基本数据类型 ...
《Python 3程序开发指南》本书首先讲述了构成Python语言的8个关键要素,之后分章节对其进行了详尽的阐述,包括数据类型、控制结构与函数、模块、文件处理、调试、进程与线程、网络、数据库、正则表达式、GUI程序设计...
第2章 C#编程和编译环境 第3章 数据类型和变量 第4章 运算符和表达式 第5章 数据的输入和输出 第6章 程序控制语句 第7章 数 组 21.1 OWC组件 第8章 类 第9章 继承与多态 第10章 接口、代理和事件 第11章 结构和枚举 ...
51单片机开发板实验:用不同数据类型控制灯闪烁时间程序源代码。 1、开发环境:KEIL。 2、编程语言:C语言。
"使用自定义功能块(SCL)、自定义数据类型和自定义面板,博图V17弹窗源程序实现了主画面的弹窗功能。该程序支持在多个设备上快速编写。同时,提供了该源程序的相关信息。" 这段话涉及到的知识点和领域范围是: ...
这个程序提供了一个数据结构,用以处理CRL中一直缺乏的金钱货币数据类型。从而简化程序的开发。
windows程序开发中常用的定义,包括各种句柄类型,windows框架下的消息类型,位图应用
2.1.2 数据类型20 .2.1.3 变量与常量24 2.1.4 自定义结构体26 2.1.5 数组27 2.1.6 运算符与表达式29 2.1.7 结构化控制语句32 2.2 面向对象编程40 2.2.1 “面向对象编程”中的概念40 2.2.2 “对象”和“类”的使用42...
实例250 使用格式化函数转换查询条件的数据类型 385 实例251 在查询中使用字符串函数 387 实例252 在查询中使用日期函数 388 8.19 having语句应用 390 实例253 利用having语句过滤分组数据 390 ...
2 数据类型 3 组合类型 4 控制结构与函数 5 模块 6 OOP 7 文件处理 8 高级程序设计技术 8.1 FP 9 调试、测试与Profiling 10 进程与线程 11 网络 12 数据库 13 正则表达式 14 分析简介 14.1 PyParsing 14.2 PLY 15 ...
《Python 3程序开发指南》本书首先讲述了构成Python语言的8个关键要素,之后分章节对其进行了详尽的阐述,包括数据类型、控制结构与函数、模块、文件处理、调试、进程与线程、网络、数据库、正则表达式、GUI程序设计...
基本数据类型 目录 课程导入 掌握Java基本数据类型 掌握直接量的表示 计算机的基本作用就是做运算。运算的数据可以由用户输入、从文件获得。 我们可以把数据进行归类,整数、小数、一串字符、单个字符。 数据类型 ...
《物联网C#程序开发案例式教程》教学课件-第三章-数据类型与运算符03 c#经典案例.pptx
《物联网C#程序开发案例式教程》教学课件-第三章-数据类型与运算符02 c#经典案例.pptx
《物联网C#程序开发案例式教程》教学课件-第三章-数据类型与运算符04 c#经典案例.pptx
SSM项目小程序“微信小程序新闻资讯微信小程序开发后端Php.zip”是一个基于Spring、Spring MVC和MyBatis(SSM)框架开发的微信小程序,专为提供新闻资讯服务的平台。该项目结合了微信小程序的便捷性和PHP语言的技术...