在Java中精确地将两个数字相乘[重复]

2024-02-01

我正在寻找一种在 Java 中将两个浮点数相乘的精确方法,我读到我应该使用 BigDecimal,但它并没有按预期工作。我究竟做错了什么?

我的代码:

BigDecimal a = new BigDecimal(3.53);
BigDecimal b = new BigDecimal(3.59);
BigDecimal c = a.multiply(b);

System.out.println(c);

Result:

12.672699999999998796873512674210388041622697702955394242845497954075284496866515837609767913818359375

预期结果:

12.6727

当您使用BigDecimal(double) https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#BigDecimal-double-构造函数不能比 a 更精确double, 使用String形式代替。喜欢,

BigDecimal a = new BigDecimal("3.53");
BigDecimal b = new BigDecimal("3.59");
BigDecimal c = a.multiply(b);
System.out.println(c);

哪个输出

12.6727

链接的 Javadoc 部分内容是 -

Notes:

  1. 此构造函数的结果可能有些不可预测。人们可能会认为编写新的BigDecimal(0.1)在Java中创建一个BigDecimal它恰好等于 0.1(未缩放的值 1,缩放比例为 1),但它实际上等于0.1000000000000000055511151231257827021181583404541015625。这是因为 0.1 不能精确地表示为double(或者就此而言,作为任何有限长度的二进制分数)。因此,无论表面如何,传递给构造函数的值并不完全等于 0.1。

  2. 另一方面,String 构造函数是完全可以预测的:写new BigDecimal("0.1")创建一个 BigDecimal ,它是exactly正如人们所期望的那样,等于 0.1。因此,一般建议字符串构造函数 https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#BigDecimal-java.lang.String-优先使用这个。

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

在Java中精确地将两个数字相乘[重复] 的相关文章

  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • 在不支持 CAS 操作的处理器上进行 CompareAndSet

    今天 我在一次采访中被问到下一个问题 如果您在具有不支持 CAS 操作的处理器的机器上调用 AtomicLong 的compareAndSet 方法 会发生什么情况 您能否帮我解决这个问题 并在可能的情况下提供一些全面描述的链接 From
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 为什么在 10 个 Java 线程中递增一个数字不会得到 10 的值?

    我不明白 a 的值为0 为什么 a 不是10 那段代码的运行过程是怎样的 是否需要从Java内存模型来分析 这是我的测试代码 package com study concurrent demo import lombok extern sl
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 如何在 IntelliJ IDEA 中运行 akka actor

    来自 Akka 网站文档 然后 这个主要方法将创建所需的基础设施 运行演员 启动给定的主要演员并安排 一旦主要参与者终止 整个应用程序就会关闭 因此 您将能够使用类似于以下的命令运行上面的代码 下列的 java classpath akka
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On

随机推荐

  • Haskell —— 是否有元组的 monad 序列函数?

    假设我有一个类型的值Monad m gt m a m a 我想对这对进行 排序 以创建类型的值Monad m gt m a a 它以与 序列 函数相同的方式组合两个值的单子上下文 是否有一些标准功能或标准方法可以做到这一点 这个操作还有意义
  • 每个页面加载的计时器减量都会有所不同

    我的项目有一个计时器 每次减少 1 秒 但是 如果计数器第二次开始工作 它会减少 2 秒 第三次则减少 3 秒 依此类推 我应该怎么做才能始终减少 1 秒 void viewDidAppear BOOL animated count 15
  • 计算大于另一个整数 x 的 k 位集合的最小整数?

    我想精确地计算最小整数k位设置 大于另一个整数x 例如如果x 1001010然后 为了k 2 答案应该是1010000 for k 4 答案应该是1001011并为k 5答案是1001111 我认为需要设置至少与整数中最左边设置的位一样多的
  • JSHint 奇怪的行为

    我认为我应该问关于 jSHint 的新问题 讨论开始了here https stackoverflow com questions 35987052 js strange behavior 我现在可以看到来自 JSHint 的奇怪警告 我只
  • 从 KMS CipherTextBlob 获取 KMS 密钥

    如何从密文 blob 中获取 KMS 密钥信息 以aws网站为例 AWS KMS 文档 http docs aws amazon com cli latest reference kms encrypt html aws kms encry
  • Matlab 和 XTickLabel

    我已经尝试让 Matlab 更改轮廓图上的标签大约一个小时了 当我去更改 XTickLabel 或 XTick 时 它只是完全删除我的 x 轴 令人沮丧和愤怒的是我正在做的事情exactly什么所有的帮助页面 http www mathwo
  • 使用 Git 版本控制查看文件的更改历史记录

    如何查看单个文件的历史记录以及更改内容的完整详细信息 git log filename 显示文件的提交历史记录 但如何查看已更改的文件内容 这让 Git 为每个日志条目生成补丁 git log p filename See git help
  • 如何使css/images/js文件等所有静态文件不被asp.net mvc处理?

    静态文件有可能不被asp net mvc引擎处理吗 我可以在 IIS 级别或其他级别执行此操作吗 当然无需为静态文件创建单独的 IIS 网站 您需要为不希望通过 ASP NET MVC 提供服务的特定类型的文件创建忽略路由 针对您要忽略的文
  • 切换 kivy 小部件

    我正在使用 Kivy python 库 我定义了两个小部件 当程序运行时 我运行第一个小部件 当按下该小部件按钮时 我希望它消失并被第二个小部件替换 这是两个小部件的 kv uitest kv
  • 确定 MouseListener 中单击的 JPanel 组件。事件处理

    我有一个扩展 JPanel 的类 public class ButtonPanel extends JPanel private label public ButtonPanel label new JLabel waiting for c
  • Cypress 组件测试拦截 getServerSideProps 请求

    使用 cypress 组件测试时无法弄清楚如何拦截 getServerSideProps 做了很多研究和最好的线索链接 https github com cypress io cypress discussions 9328 https g
  • 注册表模式 vs 服务定位器模式 vs 依赖注入容器

    它们之间有什么区别而不是通过键设置和获取数组中的对象吗 class Registry private container array public static function Set name object self container
  • 除了 malloc/free 之外,程序还需要操作系统提供其他东西吗?

    我正在为我正在开发的操作系统设计内核 我实际上将其称为 核心 只是为了有所不同 但它基本上是相同的 如果我无法启动和运行多任务处理 内存管理和其他基本功能 那么操作系统本身的细节就无关紧要了 所以我需要首先解决这个问题 我有一些关于设计 m
  • 如何使用 Java 获取 AWS Glue 客户端

    我正在尝试从用 Java 编写的 Lambda 代码调用 AWS Glue 中的作业 但我无法获得 Glue 客户端 就像我们有这样的 DynamoClient AmazonDynamoDB client AmazonDynamoDBCli
  • 如何在保留空格的同时分割()字符串[重复]

    这个问题在这里已经有答案了 如何拆分一串单词并保留空格 这是代码 String words s split 字符串 s 包含 hello world 代码运行后 words 包含 hello world 理想情况下 它不应该是中间的空字符串
  • awk - 如果为 null,则打印最后一列值并使用默认值

    我正在使用 awk 命令来打印值 对于最后一列 如果没有找到值 我需要它来打印NA 例如 在下面的代码中 当 3 is NULL 我需要打印为NA 无论如何我可以包括一个if isnull条件什么的 awk F print 1 2 3 lo
  • Android 中的 TextView 可以显示数字文本吗?

    嗨朋友们 在我的应用程序中 要求文本值应显示在数字文本格式可以吗TextView 数字时钟如何显示 请提供任何帮助 从this下载字体link http font downloadatoz com font 24267 digital 7
  • 将 Intent 从 BroadcastReceiver 类发送到当前正在运行的活动

    我有一个扩展的类BroadcastReceiver 收到短信后 我想将信息传递到我的主要活动类 以在框中显示文本 如果文本已存在 则追加 public class SmsReceiver extends BroadcastReceiver
  • Algolia 对数组属性的过滤器未按预期工作

    我有一个关于 algolia 的索引 有这样的用户 UserA createdAt 1675364400000 email email protected cdn cgi l email protection products produc
  • 在Java中精确地将两个数字相乘[重复]

    这个问题在这里已经有答案了 我正在寻找一种在 Java 中将两个浮点数相乘的精确方法 我读到我应该使用 BigDecimal 但它并没有按预期工作 我究竟做错了什么 我的代码 BigDecimal a new BigDecimal 3 53