- 浏览: 110091 次
- 来自: 杭州
文章分类
最新评论
-
lc2178890:
朋友,你在线吗?能不能在线交流一下,我也有遇见这个问题,不过是 ...
客户端用https连接服务器的一点心得 -
lj0910:
楼主 你的这个实现了吗? 能不能指教下。
用js如何打印网页中的某张图片。 -
goglad:
朋友,没有那么复杂吧,我更具tomcat document里面 ...
客户端用https连接服务器的一点心得 -
lzycxy:
我也出现了你这类似的问题,不知道你上述的问题解决了没有,如果解 ...
tomcat 配置 jmx -
baoqf:
网页上的图片点鼠标右键有个菜单叫“打印图片...”,我想用js ...
用js如何打印网页中的某张图片。
Java 理论与实践: 您的小数点到哪里去了?使用浮点数和小数中的技巧和陷阱 |
级别: 初级 Brian Goetz (brian@quiotix.com), 首席顾问, Quiotix Corp 2003 年 4 月 20 日 许多程序员在其整个开发生涯中都不曾使用定点或浮点数,可能的例外是,偶尔在计时测试或基准测试程序中会用到。Java语言和类库支持两类非整数类型 ― IEEE 754 浮点(<!----><!----><!----> 虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它。这容易理解 ― 我们中大多数很少需要使用非整数类型。除了科学计算和偶尔的计时测试或基准测试程序,其它情况下几乎都用不着它。同样,大多数开发人员也容易忽略 Java 语言支持两种基本的浮点类型: IEEE 754 用科学记数法以底数为 2 的小数来表示浮点数。IEEE 浮点数用 1 位表示数字的符号,用 8 位来表示指数,用 23 位来表示尾数,即小数部分。作为有符号整数的指数可以有正负之分。小数部分用二进制(底数 2)小数来表示,这意味着最高位对应着值 ?(2 -1),第二位对应着 ?(2 -2),依此类推。对于双精度浮点数,用 11 位表示指数,52 位表示尾数。IEEE 浮点值的格式如图 1 所示。 图 1. IEEE 754 浮点数的格式 因为用科学记数法可以有多种方式来表示给定数字,所以要规范化浮点数,以便用底数为 2 并且小数点左边为 1 的小数来表示,按照需要调节指数就可以得到所需的数字。所以,例如,数 1.25 可以表示为尾数为 1.01,指数为 0: 数 10.0 可以表示为尾数为 1.01,指数为 3: 除了编码所允许的值的标准范围(对于 这些特殊的数字有一些不寻常的特征。例如,
使事情更糟的是,在基本
由于无穷大、NaN 和
浮点运算很少是精确的。虽然一些数字(譬如
类似的,
将得到以下输出:
这可能不是您起初所期望的。
由于存在 NaN 的不寻常比较行为和在几乎所有浮点计算中都不可避免地会出现舍入误差,解释浮点值的比较运算符的结果比较麻烦。 最好完全避免使用浮点数比较。当然,这并不总是可能的,但您应该意识到要限制浮点数比较。如果必须比较浮点数来看它们是否相等,则应该将它们差的绝对值同一些预先选定的小正数进行比较,这样您所做的就是测试它们是否“足够接近”。(如果不知道基本的计算范围,可以使用测试“abs(a/b - 1) < epsilon”,这种方法比简单地比较两者之差要更准确)。甚至测试看一个值是比零大还是比零小也存在危险 ―“以为”会生成比零略大值的计算事实上可能由于积累的舍入误差会生成略微比零小的数字。 NaN 的无序性质使得在比较浮点数时更容易发生错误。当比较浮点数时,围绕无穷大和 NaN 问题,一种避免 gotcha 的经验法则是显式地测试值的有效性,而不是试图排除无效值。在清单 1 中,有两个可能的用于特性的 setter 的实现,该特性只能接受非负数值。第一个实现会接受 NaN,第二个不会。第二种形式比较好,因为它显式地检测了您认为有效的值的范围。 清单 1. 需要非负浮点值的较好办法和较差办法
一些非整数值(如几美元和几美分这样的小数)需要很精确。浮点数不是精确值,所以使用它们会导致舍入误差。因此,使用浮点数来试图表示象货币量这样的精确数量不是一个好的想法。使用浮点数来进行美元和美分计算会得到灾难性的后果。浮点数最好用来表示象测量值这类数值,这类值从一开始就不怎么精确。
从 JDK 1.3 起,Java 开发人员就有了另一种数值表示法来表示非整数: 用于加、减、乘和除的方法给 如浮点类型一样, 另外还有一些情形,任意精度的小数运算仍不能表示精确结果。例如, SQL-92 包括 如果希望将数字存储到数据库中的 对于 对于 如果使用
在执行这段似乎无害的代码时会抛出一些令人迷惑不解的异常(这取决于具体的 JDBC 驱动程序),因为
在 Java 程序中使用浮点数和小数充满着陷阱。浮点数和小数不象整数一样“循规蹈矩”,不能假定浮点计算一定产生整型或精确的结果,虽然它们的确“应该”那样做。最好将浮点运算保留用作计算本来就不精确的数值,譬如测量。如果需要表示定点数(譬如,几美元和几美分),则使用 |
发表评论
-
tomcat 配置 jmx
2007-09-24 13:19 59981.在tomcat/bin/catalina.sh中这句改为: ... -
客户端用https连接服务器的一点心得
2007-06-27 21:43 31137客户端用https连接服务器的一点心得 项目需要用h ... -
Struts 应用转移到Struts 2
2006-12-23 19:30 2698关键字: Struts2 ... -
解决windows下编辑的shell文件unix下不能用的问题
2007-09-24 13:19 1895如果在windows下编辑的shell文件,shell文件中第 ... -
Java 程序中的多线程
2006-07-23 16:05 1298Java 程序中的多线 ... -
编写tapestry页面时碰到的问题集锦
2004-09-24 19:50 1230popup window如何做? 在服务器端如何输出javas ... -
eclipse 技巧、问题及解决
2004-09-24 20:38 1410启动eclipse 时出错,problems during s ... -
struts 问题集
2004-09-24 20:55 1532struts form提交普通控件时,Action中得到的值是 ... -
使用axis部署webservice
2004-09-24 21:03 2536部署axis时把java类改成jws文件,放在Axis根目录下 ... -
eclipse3.0中使用lomboz的注意问题
2004-09-24 21:13 986eclipse必须先按装emf ( eclipse model ... -
Java程序员面试陷阱大全
2004-10-18 10:37 1105谈谈final, finally, finalize的区别 ...
相关推荐
【Java理论与实践:您的小数点到哪里去了?】 在Java编程中,浮点数和小数的使用虽然相对较少,但在特定场景下却至关重要。这篇文章主要探讨了Java中处理非整数类型,尤其是浮点数(float和double)和任意精度小数...
当我们需要让用户输入带有小数的数值时,可能会遇到一个问题:用户可能会误输入两个或多个小数点,导致数据格式错误。为了解决这个问题,我们可以编写一些验证逻辑来确保输入的文本仅包含一个有效的小数点。 首先,...
最后,需要注意到,上述内容中涉及到的硬件部分和程序代码,虽然由于OCR扫描可能出现的误差,但整体逻辑和程序结构是清晰的,重点在于理解单片机如何控制数码管显示小数点,以及相关的硬件控制和程序编程方法。
arduino 超声波测距代码 精确到小数点后两位
34-显示小数点(51单片机C语言实例Proteus仿真和代码)34-显示小数点(51单片机C语言实例Proteus仿真和代码)34-显示小数点(51单片机C语言实例Proteus仿真和代码)34-显示小数点(51单片机C语言实例Proteus仿真和代码)34-...
静态驱动简单易懂,每个段和小数点都直接连接到单片机的GPIO(通用输入/输出)端口,但需要较多的IO资源。动态驱动则通过轮流快速切换段信号,实现显示多个数码管的效果,节省了IO资源,但编程相对复杂。 在显示...
在科学实验中,使用精密仪器测量质量、体积等数据时,同样会涉及到小数点的移动。这些实际应用场景,都是小数点搬家规则的生动体现,它们帮助学生理解数学知识与现实生活的紧密联系。 掌握小数点搬家的规则,除了有...
在Excel中,筛选带有小数点的数据是一项常见的需求,尤其在处理包含数值的大型数据集时。本教程将详细介绍如何通过简单的步骤实现这一操作。首先,我们先理解一下问题的核心:我们需要找出那些在单元格中包含小数...
比如,如果一个数码管有8段(7个数字段加一个小数点),那么控制器会依次点亮这8段,每次点亮一个或几个,然后迅速切换到下一段,这个过程非常快,以至于人眼无法察觉到闪烁。 在动态扫描中,小数点的显示与数字段...
在PLC(可编程逻辑控制器)编程中,处理小数点运算是一项常见的任务,尤其是在进行自动化控制时,可能需要对传感器读数、电机速度、流量控制等进行精确的浮点运算。三菱PLC提供了这样的功能,支持FX系列、Q系列以及L...
4. 添加到字段目录表:同时,别忘了将`REFFI`字段添加到ALV字段目录表中。这是必要的,因为ALV内部会依据`QFIELDNAME`查找字段目录表中的对应项。如果未添加,尝试编辑字段时会导致运行时错误。 5. 解释固定值的...
通过本文的介绍,我们可以了解到在SQL中处理小数点后特定位数的方法并不复杂,主要涉及到`ROUND`、`CONVERT`和`CAST`等常用函数的应用。选择合适的方法不仅可以简化查询语句,还能提高数据处理的准确性和效率。希望...
labview小数至字符串转化时去掉无效0和小数点函数,labview2013以上版本可以打开。
在IT领域,特别是前端开发中,对于输入框(input)的控制与验证是十分关键的一环,这直接关系到用户体验和数据的有效性。标题“input框只能输入数字和一个小数点”以及描述“input框只能输入数字和一个小数点,对...
在Java编程中,经常需要处理数字的格式化问题,特别是当涉及到小数点后的非必要零时。本文将详细介绍如何使用正则表达式来去除浮点数或字符串表示的数值中小数点后多余的零。 #### 一、背景介绍 在实际开发过程中...
### 使用DS18B20实现精确到小数点后一位的温度测量 #### 引言 DS18B20是一种单总线数字温度传感器,由Dallas Semiconductor制造,广泛应用于各种工业、科研及家用环境监测系统中。其显著特点是在-55°C至+125°C的...
小数点的移动对数字的大小有着显著的影响,它涉及到小数的扩大和缩小。 首先,比较两个小数的大小,通常我们从最高位开始比较,如果最高位相同,则比较次高位,直到找出差异或者所有位数都相同。例如,在给定的数字...
### 验证文本框只能输入数字和小数点的知识点详解 #### 一、背景介绍 在Web开发中,为了确保用户输入的数据符合预期格式,经常需要对输入的数据进行校验。例如,在处理金额或重量等数值时,我们通常希望用户只能...
通过改变这些引脚的电平,可以显示出0到9的数字以及特殊字符如小数点。 在实际编程中,我们可能需要定义一个段码表,将每个数字对应的7段码存储在一个数组中。然后,根据要显示的数字和小数点的状态,更新对应的...
默认情况下,PROJECT会精确到小时级别,因此可能导致工期出现小数。例如,一个任务可能持续4.5天,这在实际操作中并不常见,通常我们会希望看到4天或5天的结果。 要消除小数工期,有以下几种方法: 1. **设置工期...