为什么应用程序通常不使用 int 在内部表示货币值?

2023-12-19

为什么应用程序通常不使用整数数据类型(例如int or long在 C++/Java/C# 中)在内部表示货币值,而不是使用浮点数据类型 (float, double)或者类似Java的BigDecimal?

例如,如果我正在编写一个 Java 应用程序,并且有一个变量想要表示美元的实际值(不需要表示便士的分数),我可以声明一个int表示分数的值。例如,值“$1.00”将表示为 100。这似乎是使用double(参见问题为什么不使用 Double 或 Float 来表示货币? https://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency) or a BigDecimal(这是一个比简单基元更重量级的对象int).

显然,在向用户显示整数值之前,或者在用户输入货币值时,需要将整数值“转换”(即从 100 转换为“$1”或“$1.00”),但这样做似乎并不重要比格式化更麻烦double or a BigDecimal用于显示。

为什么在不需要表示美分分数(或其他货币类型的等价物)的应用程序中,这种方法不是最佳实践?


为什么应用程序通常不使用[整数]在内部表示货币值?

  1. 它不适合简单的编码。 1.10 美元相当于 110 美分。好的,但是当您需要计算税金时该怎么办(即 1.10 美元 * 4.225% - 密苏里州的税率,结果为 0.046475 美元)。要将所有资金保留为整数,您还必须将销售税转换为整数 (4225),这需要将 110 美分进一步转换为 11000000。数学计算结果为 11000000 * 4225 / 100000 = 464750。这是这是一个问题,因为现在我们的值以美分为单位(分别为 11000000 和 464750)。所有这一切都是为了将​​钱存储为整数。

  2. 因此,用本机货币来思考和编码会更容易。在美国,这将以美元为单位,美分为小数(即 1.10 美元)。用 110 美分进行编码并不那么自然。使用以 10 为基数的浮点数(例如 Java 的BigDecimal和 .NET 的Decimal)通常对于货币值来说足够精确(与以 2 为基数的浮点数相比,例如Float and Double).

为什么在不需要表示美分分数(或其他货币类型的等价物)的应用程序中,这种方法不是最佳实践?

我认为上面的第一点表明,很难摆脱需要表示美分的分数,至少在计算销售税时是这样——这在商业应用程序中很常见。

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

为什么应用程序通常不使用 int 在内部表示货币值? 的相关文章

随机推荐

  • 仅更新 MySQL 中重复条目的第一条记录

    问题解决了 Update 不太符合我的需要 让我们在带有字段 ID NAME COVER 的简单表上做示例 我有 100 个条目 其中有 100 个名称 其中一些名称重复 但我只想更新重复的第一个名称 尝试更新数据库中所有重复项的所有第一行
  • spring有关闭进程来放置清理代码吗?

    当我的 Spring Web 应用程序关闭时 是否有一个事件我可以以某种方式连接到我可以执行一些清理代码以清空一些池等 您可以使用以下内容 destroy method as amir75 recommends 预销毁 http stati
  • 我可以同时使用 body-parser 和 Formidable 吗?

    我试图解决一个问题几天 但无法理解一些事情 我有一个使用 NodeJS 和 ExpressJS 创建的网站 为了处理表单 我使用 body parser var adName req body adName var adMessage re
  • 如何以编程方式获取最小化应用程序的屏幕截图?

    我正在尝试获取最小化应用程序的屏幕截图 关于如何在 Windows 下进行此操作有什么想法吗 我正在使用 C 提前谢谢 何塞 恢复 截图 最小化 如果它不在屏幕上 我不知道如何复制图像
  • 如何在表视图中的单元格中创建部分?

    我正在创建收据视图 为此我使用表格视图 我创建了多个单元来实现此功能 这是我使用多个单元格的代码 if indexPath section 4 let cell ProductSummaryTitleCell self tblCategor
  • com.android.camera.action.CROP 不适用于 Android jelly bean 4.3 吗?

    我在使用相机拍照后使用 com android camera action CROP 进行裁剪 下面是我的代码 它在 4 3 之前可以正常工作 Intent cropIntent new Intent com android camera
  • 导致错误的相关小部件是 Scaffold

    class NavBarState extends State
  • EF 4.1 映射问题

    我有一个与其自身有关系的类 public class Person public long ID get set public string Name get set public virtual Person Mother get set
  • 根据 Pandas 中的另一列连接一组列值

    给定一个 Pandas 数据框 其中有一些标记的系列 例如Name and Villain 假设数据框具有以下值 Name 蝙蝠侠 蝙蝠侠 蜘蛛侠 蜘蛛侠 蜘蛛侠 蜘蛛侠 Villain 小丑 贝恩 绿魔 电光 毒液 章鱼博士 总共 上述数
  • 如何在 codeigniter 中使用自定义字体和图标

    猛击大家 我想在我的视图中使用来自 flaticon com 的自定义图标 中的图标http successpermis com css flaticon html http successpermis com css flaticon h
  • Android 服务读取 localStorage?

    我为 Android 开发了一个 PhoneGap 应用程序 该应用程序由以下部分组成webapp HTML jQuery 和后台服务 Java 代码 由 web 应用程序启动 这个网络应用程序写入窗口本地存储 like 可以读这个吗nam
  • html页面无法通过libcurl获取cookie

    我修改了之前的代码 有兴趣的话可以看我之前的帖子通过curl设置cookie https stackoverflow com questions 6007225 setting cookie through curl但这是一个新的开始我的新
  • Appcelerator 应用程序无法重新启动 (Android)

    我创建了一个应用程序 一切正常 但是 当我按回键关闭应用程序 bij 并再次打开该应用程序时 它不会通过启动屏幕 如果我通过 Android 运行应用程序屏幕完全关闭该应用程序 它会再次正常打开 以前有人遇到过这个问题吗 提前致谢 将您的应
  • 元素随机排列且 maxOccurs > 1

    我需要创建一个XSD1 0 验证XML file 验证将使用lxml etree from python 并且该工具仅支持 XML Schema 1 0 lxml 与模式 1 1 https stackoverflow com questi
  • Angular 2 中的动态模板和 templateURL

    每当我必须在页面中动态包含模板时 我就一直在 Angular 1 中使用 ng include 现在如何在 Angular 2 中实现这一点 我尝试搜索并找到了这些 https groups google com forum topic a
  • Django 选择查询时间差异

    我正在尝试查询 django 中的数据库表 其中包括以下列 id start time end time 我可以直接在查询中获取差异 而不是获取两者的单独值吗 有这样的效果 SELECT id Diff start time end tim
  • 从 shell 脚本在 Firefox 的特定实例中打开新选项卡

    我有一个 shell 脚本 可以创建 Firefox 配置文件 然后使用它们同时打开多个 Firefox 实例 问题是如何在特定的 Firefox 实例中打开 URL 我努力了 firefox CREATEPROFILE test fire
  • 如何自动启动/预热 IIS 中托管的 .net core Web 应用程序

    我有一个 net core 3 1 Web 应用程序 托管在 IIS 上 我无法弄清楚如何在第一个请求之前运行一段代码 我做了以下事情 设置应用程序池的 启动模式 AlwaysRunning 和 空闲超时 0 在网站上设置 预加载已启用 t
  • 有关 SP 和 UDF 的帮助吗?

    我正在尝试通过 MySQL 和 PHP 学习和使用 SP 存储过程 和 UDF 用户定义函数 SP和UDF有什么区别 用途是什么 一段简单的代码在 PHP 和 SQL 中会是什么样子 其中 SP 正在更新 写入或从 MySQL 数据库的表中
  • 为什么应用程序通常不使用 int 在内部表示货币值?

    为什么应用程序通常不使用整数数据类型 例如int or long在 C Java C 中 在内部表示货币值 而不是使用浮点数据类型 float double 或者类似Java的BigDecimal 例如 如果我正在编写一个 Java 应用程