不可预测的双重[重复]

2024-01-07

可能的重复:
.NET 上的双精度问题 https://stackoverflow.com/questions/566958/double-precision-problems-on-net
双重计算产生奇数结果 https://stackoverflow.com/questions/8253789/double-calculation-producing-odd-result

我知道双精度值的内部表示0.2是这样的0.199999。但下面的代码仍然让我困惑。

CODE:

public static void main(String[] args) {
    double d= 0.3d;
    double f= 0.1d;
    System.out.println(d+f);
    System.out.println(d*f);
    System.out.println(d);
    System.out.println(f);
    System.out.println(d-f);
    System.out.println(d/f);
    System.out.println((d-f)*(d-f));
}

OUTPUT:

0.4
0.03
0.3
0.1
0.19999999999999998
2.9999999999999996
0.039999999999999994

究竟发生了什么?加法、乘法可以进行,但减法、除法则不行。谁能详细说明一下为什么加法与减法的效果不同 ?


如果您迫切需要精度,请使用 BigDecimal。

public static void main(String[] args) {
    BigDecimal d = BigDecimal.valueOf(0.3d);
    BigDecimal f = BigDecimal.valueOf(0.1d);
    System.out.println(d.add(f));
    System.out.println(d.multiply(f));
    System.out.println(d);
    System.out.println(f);
    System.out.println(d.subtract(f));
    System.out.println(d.divide(f));
    System.out.println((d.subtract(f)).multiply(d.subtract(f)));
}

Output

0.4
0.03
0.3
0.1
0.2
3
0.04

或者对结果进行四舍五入,DecimalFormat 会使用 # 符号很好地完成此操作,这意味着仅在必要时显示小数

    double d = 0.3d;
    double f = 0.1d;
    DecimalFormat format = new DecimalFormat("#.##");
    System.out.println(format.format(d + f));
    System.out.println(format.format(d * f));
    System.out.println(format.format(d));
    System.out.println(format.format(f));
    System.out.println(format.format(d - f));
    System.out.println(format.format(d / f));
    System.out.println(format.format((d - f) * (d - f)));

Output

0.4
0.03
0.3
0.1
0.2
3
0.04
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不可预测的双重[重复] 的相关文章

  • 如果测试用例失败,Selenium Web 驱动程序无法关闭 Firefox 实例

    我各位 我正在使用 junit 和 selenium web 驱动程序 2 28 问题是 如果我运行成功的测试用例 Web 驱动器能够关闭 Firefox 实例 但是当测试用例失败时 Selenium Web 驱动器无法关闭 Firefox
  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • 在数据流模板中调用 waitUntilFinish() 后可以运行代码吗?

    我有一个批处理 Apache Beam 作业 它从 GCS 获取文件作为输入 我的目标是根据执行后管道的状态将文件移动到两个 GCS 存储桶之一 如果管道执行成功 则将文件移动到存储桶 A 否则 如果管道在执行过程中出现任何未处理的异常 则
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • 为什么 Cortex-A 的复位处理程序位于 0x0 而 Cortex-M3 则不然

    Cortex M3 的初始堆栈指针值位于 0x0 复位处理程序位于 0x4 原因是什么 这样做的设计理由是什么 为什么 ARM 人员不能像 Cortex A 那样将 0x0 留给复位处理程序 然后在复位处理程序内初始化 SP 我认为这属于
  • 使用 SQLITE3 和 Objective C 转换 DATETIME 时出现问题

    我有一个 sqlite3 数据库 其中包含 DATETIME 列 其中包含格式如下的值 2013 01 09 04 00 00 我想弄清楚如何确定时间是上午还是下午 以下是我如何使用 Objective C 从 Sqlite3 DB 读取和
  • Puppeteer chrome 获得活动/可见选项卡

    在 Chrome 扩展中 您可以使用下面的命令来查找窗口中的活动选项卡 chrome tabs query currentWindow true active true 我有一个连接到现有浏览器并获取所有页面的以下代码 我无法确定是否有办法
  • Angularjs:复选框和 ng-change

    我无法理解 ng change 的工作原理 我有一份邀请参加拍卖的用户列表 我想用一个复选框来做到这一点 如果选中用户 则必须将其姓名保存到数组中 稍后我会邀请他们 我只知道该怎么做 但我不明白如何使用该复选框 我做了这样的事情 ul cl
  • 地图视图删除多个图钉

    我想在地图上显示用户位置并放置一个图钉 但我的应用程序放置了两个相距一定距离的图钉 我想知道当新图钉被放置时如何删除旧图钉 以便地图上应该有一个图钉我的代码是 MKAnnotationView mapView MKMapView mV vi
  • 如何安装rabbitmq管理插件(rabbitmq-plugins)

    简短的 有没有办法通过ubuntu包安装rabbitmq plugins Details 我的rabbitmq 在我的ubuntu 系统中运行正常 现在我正在尝试通过管理插件监控正在发生的情况 我正在按照rabbitmq com manag
  • 如何在 .vimrc 文件中“获取”某些内容?

    我最近一直在努力扩展我的 vim foo 并且遇到了几个插件 自动标记 vim http www vim org scripts script php script id 1343例如 要求它们在我的 vimrc 文件中 来源 这到底是什么
  • SQL DATETIME 从 Excel 插入?

    所以我遇到了一个相当奇怪的问题 我在Excel中有一个列 比如说A列 其中的数据如下所示 2015年4月11日 10 14 我还有很多其他列 但无论如何在 Excel 中的 SQL Insert 语句中 数据 复制时 如下所示 42105
  • java中如何转义文件路径中的反斜杠和自动生成的转义字符

    我有一个非常小而简单的问题 但我没有得到解决方案 实际上我正在使用文件选择器获取 CSV 文件路径 我使用加载数据本地 infile 查询将此 csv 文件中的数据输入到数据库中 假设我输入的文件路径是 C title csv 当我将此字符
  • 使用 lldb 调用带有字符串参数的函数:如何?

    我无法使用 lldb 调用采用字符串参数的简单非模板化函数 有没有办法让 lldb 理解 C 数据类型 字符串 这是 C 程序中常用的数据类型 这里的示例源代码只是创建一个带有几个构造函数的简单类 然后调用它们 省略了 iostream 和
  • Java 中什么是可调用的?

    标题几乎概括了它 我想了解 callable 的概念和思想 我读过一篇在这里提问 https stackoverflow com questions 141284 the difference between the runnable an
  • 函数返回另一个函数的返回值

    如果我想打电话Bar 代替Foo does Bar 返回 Foo 返回的副本 额外开销 或者返回与Foo 临时堆栈上的位置 vector
  • 如何使用 Google Apps 脚本获取单元格的格式化值

    我想使用 Google Apps 脚本通过连接 Google 电子表格中所选单元格的值来创建字符串 问题是我不知道单元格是否包含数字 日期或文本 当值是数字或日期时 我想获取格式化值 即它在电子表格中显示的方式 例如 以下函数将返回命名范围
  • TabBarController didSelectViewController 不工作

    我知道这是一个非常重复的话题 但我无法让它发挥作用 主选项卡 h import
  • Django settings.py:单独的本地和全局配置

    我想知道是否可以将 Django 中的 本地 配置 静态的本地路径 必须是绝对的模板内容 本地数据库信息等 与 全局 配置 URL 中间件类 分开 安装的应用程序等 这样几个人就可以通过 Git 或 SVN 处理同一个项目 而不必在每次完成
  • FB.ui 和设置弹出窗口大小

    我正在使用 FB ui 并将显示参数设置为弹出 当方法为 stream publish 时 它会在加载内容时自动调整大小 但是 当使用 fbml dialog 为了显示多好友选择器 时 它显示的大小我无法更改 并且内容显示为裁剪的 我尝试过
  • 将 django-allauth 作为端点插入 django-rest-framework

    我在我的网站上使用 django allauth 进行社交登录 我还有一个由 django rest framework 提供支持的 REST API 用作移动应用程序的后端 有没有办法可以直接将 allauth 的身份验证后端插入 RES
  • js和template标签对比

    如何比较 profile id 和 JavaScript 变量profile id function compare profile id if profile id profilegroup subject id do something
  • 是否可以用 C# 创建有状态的 Web 服务?

    我现在有这样的东西 public class Service1 System Web Services WebService WebMethod public string Method1 SomeObj so SomeClass GetS
  • 不可预测的双重[重复]

    这个问题在这里已经有答案了 可能的重复 NET 上的双精度问题 https stackoverflow com questions 566958 double precision problems on net 双重计算产生奇数结果 htt