我们可以使用 double 来存储货币字段并使用 BigDecimal 进行算术吗

2024-01-19

我知道 double/float 的问题,建议使用 BigDecimal 而不是 double/float 来表示货币字段。但 double/float 更有效且节省空间。那么我的问题是: 在 Java 类中使用 double/float 来表示货币字段是可以接受的,但是使用 BigDecimal 来处理算术(即在任何算术之前将 double/float 转换为 BigDecimal)和相等检查?

原因是为了节省一些空间。我确实看到很多项目都使用 double/float 来表示货币领域。

这有什么陷阱吗? 提前致谢。


不,你不能。

Suppose double足以存储两个值x and y。然后你将它们转换为安全的BigDecimal并多个它们。结果是准确的,但是如果将乘法结果存储回double,您很可能会失去精度。证明:

double x = 1234567891234.0;
double y = 1234567891234.0;
System.out.println(x);
System.out.println(y);

BigDecimal bigZ = new BigDecimal(x).multiply(new BigDecimal(y));
double z = bigZ.doubleValue();
System.out.println(bigZ);
System.out.println(z);

Results:

1.234567891234E12          //precise 'x'
1.234567891234E12          //precise 'y'
 1524157878065965654042756  //precise 'x * y'
1.5241578780659657E24      //loosing precision

x and y是准确的,以及使用乘法BigDecimal。然而在投射回double我们失去了最低有效数字。

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

我们可以使用 double 来存储货币字段并使用 BigDecimal 进行算术吗 的相关文章

  • Java - 因内存不足错误而关闭

    关于如何最好地处理这个问题 我听到了非常矛盾的事情 并且陷入了以下困境 OOME 会导致一个线程崩溃 但不会导致整个应用程序崩溃 我需要关闭整个应用程序 但不能 因为线程没有剩余内存 我一直认为最佳实践是让它们离开 这样 JVM 就会死掉
  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • Base36 编码字符串?

    我一直在网上查找 但找不到解决此问题的方法 在 Python Ruby 或 Java 中 如何对以下字符串进行 Base 36 编码 nOrG9Eh0uyeilM8Nnu5pTywj3935kW 5 Ruby 以 36 为基数 s unpa
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • FileNotFoundException - Struts2 文件上传

    Strange FileNotFoundException使用Struts2上传文件时 这是 JSP 的一部分
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从

随机推荐

  • 如何防止我的应用程序在 iPhone 上后台运行

    有什么方法可以让应用程序在按下主页按钮时退出而不是进入后台吗 出于安全原因 如果应用程序不在后台运行 而是在按下主页时实际关闭 那就更好了 这是not为了用户的安全 而是为了应用程序上的公司数据 所以这不是用户的选择 除了强行退出之外 我找
  • Nodejs/V8 是否将编译后的机器代码存储在磁盘上的任何位置?

    Edit Node 从 Node 8 3 开始使用字节码 在此之前 源代码直接编译为机器代码 我进行了大量的 Python 编码 并且 pyc 文件中总是存在字节码 我想知道节点是否将其机器代码存储在类似的文件中 例如 将机器代码表示保留
  • 网络摄像机RTSP地址

    我有 IP 摄像头 但我不知道它是 RTSP 流的完整正确 URL 地址 仅 RTSP 设置中有端口 但据我了解 192 168 1 132 554 还不够 VLC 说找不到 rtsp 流 如何找出正确的 url 地址 如何找出正确的 ur
  • 复合主键是否为N-M关系?

    假设我们有 3 个表 实际上我现在有 2 个表 但这个例子可能会更好地说明这个想法 Person ID int 主键 名称 nvarchar xx Group ID int 主键 名称 nvarchar xx Role ID int 主键
  • Android Java:关闭屏幕

    我正在制作一个使用接近传感器打开和关闭屏幕的应用程序 接近代码已完成 但我在使用屏幕控件时遇到了麻烦 我读过我应该使用 PowerManager manager PowerManager getSystemService Context P
  • 为什么 MFMailComposeViewController 返回 MFMailComposeResultFailed?

    我的应用程序遇到一个奇怪的问题 我需要您的帮助 我正在使用 MFMailComposeViewController 发送带有附件数据的电子邮件 附件是 PDF CSV 或 XLS 文件 还可以将 ZIP 文件添加到邮件中 在大多数情况下一切
  • 关闭窗口前Socket.IO断开连接问题

    我试图阻止客户端与服务器断开连接 因此 在用户关闭打开应用程序的窗口之前 我会执行以下操作 window bind beforeunload function return Close the app 但问题是 无论用户选择离开还是留在应用
  • Groovy Node.depthFirst() 返回节点和字符串列表?

    我希望有人能指出我在这里遗漏的一些明显的东西 我觉得我已经这样做了一百次了 出于某种原因 今晚 由此产生的行为让我陷入了困境 我正在从公共 API 读取一些 XML 我想从某个节点中提取所有文本 body 内的所有内容 其中还包括各种子节点
  • Java 并发收集少写多读

    我想使用基于比较器的键值映射 这将进行读取和罕见的写入操作 通过调度程序每 3 个月一次 集合的初始加载将在应用程序启动时完成 另请注意 写入将 将单个条目添加到地图 不会修改地图的任何现有条目 ConcurrentSkipListMap
  • xcode 5 语法高亮不适用于单元测试文件

    我已经为我的项目设置了单元测试 最初 我在编译测试文件期间遇到了错误 最后我解决了它 我的测试现在正在工作 现在的问题是语法突出显示不适用于测试文件 仅适用于此 我尝试按照这个answer https stackoverflow com a
  • RegExp 中的混乱 不情愿的量词?爪哇

    为什么我得到输出ab对于以下带有 Relucutant 量词的正则表达式代码 Pattern p Pattern compile abc Matcher m p matcher abcfoo while m find System out
  • 测试内部使用 MySQL 特定查询的代码的正确方法是什么

    我正在收集数据并使用 Java 将这些数据存储在 MySQL 数据库中 此外 我使用 Maven 来构建项目 使用 TestNG 作为测试框架 使用 Spring Jdbc 来访问数据库 我实现了一个 DAO 层 它封装了对数据库的访问 除
  • 使用 JDBC 创建 PostgreSQL 触发器

    我正在尝试创建一个 PostgreSQL 触发器Play2 0 http www playframework org 数据库演化脚本 sql代码相对简单并且在pgAdminIII中运行良好 CREATE OR REPLACE FUNCTIO
  • SOLID 开放/封闭原则如何适应依赖注入和依赖倒转

    我开始应用 SOLID 原则 但发现它们有点矛盾 我的问题如下 我对依赖倒置原则的理解是类应该依赖于抽象 实际上 这意味着类应该从接口派生 到目前为止一切都很好 接下来我对开放 封闭原则的理解是 在某个截止点之后 您不应该更改类的内容 而应
  • 正则表达式用空格替换字符串中的特殊字符? ASP.NET C#

    string inputString 1 10 EP Sp arrowha wk XT R TR 2 4GHz Red Characters Collection lt gt string outputString 1 10 EP Sp a
  • 计算列日期范围内每个日期出现的行数

    我有一张包含如下数据的表格 Group Start Date End Date A 01 01 01 01 03 01 A 01 01 01 01 02 01 A 01 03 01 01 04 01 B 01 01 01 01 01 01
  • `webdriver.Chrome()` 使用 Python 在 Selenium 中获取哪个版本的 chrome 驱动程序?

    我知道webdriver Chrome 下面可以获取 chrome 驱动程序 但我不知道它获取的是哪个版本的 chrome 驱动程序 因为the doc https selenium python readthedocs io 没有任何这样
  • SCNNode 未显示在 ARFrame 的 captureImage 中

    我将 SCNNode 添加到 ARSCNView func renderer renderer SCNSceneRenderer nodeFor anchor ARAnchor gt SCNNode guard let faceAnchor
  • C# HtmlDecode 仅特定标签

    我有一个大的 htmlencoded 字符串 我只想解码特定的白名单 html 标签 有没有办法在 c 中执行此操作 WebUtility HtmlDecode 可以解码所有内容 我正在寻找将通过以下测试的 DecodeSpecificTa
  • 我们可以使用 double 来存储货币字段并使用 BigDecimal 进行算术吗

    我知道 double float 的问题 建议使用 BigDecimal 而不是 double float 来表示货币字段 但 double float 更有效且节省空间 那么我的问题是 在 Java 类中使用 double float 来