在实际的应用当中 如果涉及到金钱之类的数据类型,一直想寻找一个合适的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"显然关注的是如何在这样的平台上高效地处理数据类型以及其查找属性的生成。这个主题涉及到编程语言的基础、数据结构、算法...
1. 数据定义(DDIC):创建数据库表、结构和域,定义数据类型。 2. 事务码(Transaction Codes):执行特定任务的命令入口。 3. 语句集(Procedures):包含一系列按顺序执行的步骤。 4. 选择屏幕(Selection Screen...
《SAP ABAP实用程序开发攻略》这篇文档主要向初学者介绍了SAP ABAP语言以及其在SAP系统开发中的应用,涵盖从基础知识到数据类型和开发工具的详细解释。 首先,文档开篇提到SAP技术架构及发展历程,这为读者提供了一...
5. **数据类型转换程序**:这个VC开发的程序旨在帮助用户方便地进行数据类型的转换,可能包括基本类型如int、float,以及结构体、数组等复杂类型。程序可能提供了用户友好的界面,允许输入原始数据,选择输入和输出...
程序开发环境, 从键盘输入, 单行注释, 多行注释, 流程图, 程序调试, 变量, 声明及使用, 赋值运算符, 算术运算符, 关系运算符, 逻辑运算符, 其他运算符, 优先级, 数据类型, 基本数据类型 ...
第5章 深入解析数据类型与变量 第6章 编写Sub过程及开发函数 第7章 对象的引用方式总结 第8章 让代码自动运行 第9章 编程规则与代码优化 第10章 常用语法剖析 第11章 基本编程应用案例 第12章 数组基础 第13...
windows程序开发中常用的定义,包括各种句柄类型,windows框架下的消息类型,位图应用
《精通Linux驱动程序开发》是一本深度探讨Linux内核驱动编程技术的专业书籍,旨在帮助读者理解和掌握Linux系统下的驱动程序设计与实现。该书详细介绍了Linux驱动开发的基础知识、核心概念以及实际应用技巧,是Linux...
3. 数据类型修改:在 HANA 数据库中,需要使用特定的数据类型来存储数据。例如,使用 `DECIMAL` 数据类型来存储小数数据。 4. 索引修改:在 HANA 数据库中,需要使用特定的索引来提高查询性能。 案例代码 以下是...
* C# 中的数据类型包括值类型和引用类型 * 枚举类型是由一组命名常量组成的类型 * 在 C# 统一类型系统中,所有类型都是直接或间接地从 `System.Object` 继承 七、程序设计 * 继承可以重用现有类的数据和行为,并...
基于NDIS中间层驱动的网络数据过滤程序开发概括 NDIS中间层驱动程序是基于DDK中passthru框架扩展的,用于网络数据过滤和拦截。NDIS中间层驱动程序可以拦截和过滤网络数据,使得网络数据的传输更加安全。 NDIS中间...
本文档涵盖了32位汇编语言的重要知识点,包括汇编语言的基本概念、数据类型、寻址方式、寄存器、指令集、程序设计等方面的知识点。 一、汇编语言基础 * 汇编语言是一种低级语言,使用符号代码来表示机器代码。 * ...
**BOOST程序库完全开发指南** 在C++编程领域,BOOST程序库是一个不可或缺的资源,它为开发者提供了大量的高质量、经过严格测试的库组件,极大地扩展了C++的标准库功能。这本书——《BOOST程序库完全开发指南》正是...
2. 数据类型:Python支持多种数据类型,例如整型、浮点型、字符串、列表、元组、字典、集合等,这些数据类型是程序设计的基础。 3. 控制结构与函数:控制结构决定了程序的流程控制,比如条件语句和循环语句;函数则...
《物联网C#程序开发案例式教程》教学课件-第三章-数据类型与运算符04 c#经典案例.pptx
《精通Linux设备驱动程序开发》是一本面向程序员和系统管理员的专业书籍,主要涵盖了在Linux操作系统下编写和理解设备驱动程序的全面知识。本书是中文版,具有高清扫描的质量,便于读者清晰阅读和学习。 在Linux...
学习和理解这些核心概念是使用 OpenDDS 开发数据收发程序的基础。通过实际操作这个示例程序,开发者可以更好地掌握 OpenDDS 的工作原理和实践应用。在实际开发中,开发者还需要考虑性能优化、网络条件、安全性等因素...
实验一的目的是掌握Java Application的程序结构和开发过程,熟悉集成开发环境MyEclipse的使用,了解Java的数据类型,掌握各种变量的声明方式。 实验准备 实验准备需要复习配套教材相关章节的内容,预习本次实验的...
本合集包括了多份关于USB开发的重要资料,如《USB设备驱动开发深度解析-宋宝华.pdf》、《USB中文协议》、《USB结构体系.pdf》、《嵌入式Linux的USB驱动程序开发.pdf》、《linux设备驱动开发详解-usb篇.pdf》以及...