如果浮点数和双倍数不准确,银行如何进行涉及货币的准确计算
If float and double are not accurate, how do banks perform accurate calculations involving money?
目前正在学习C++,这刚刚发生在我身上。 我只是对此感到好奇,因为我即将开发一个简单的银行程序。 我将使用double
来计算美元/利率等,但计算机计算和人工计算之间存在一些细微差异。
我想现实世界中那些额外的 .pennie 可以改变一切!
在许多情况下,财务计算是使用定点算术而不是浮点法完成的。
例如,.NET Decimal
类型或 VB6 Currency
类型。 这些基本上只是整数类型,每个人都同意单位是几分之一美分,例如 $.0001。
必须进行一些四舍五入,但它是非常系统地完成的。 通常,四舍五入规则位于合约细则的深处(利率为x%,每T复利一次,四舍五入到最接近的便士,但每个报表期不少于$y)。
8 字节长的范围是:-9223372036854775808 max:9223372036854775807做所有事情都像几美分/便士一样,你仍然可以处理高达数万亿美元/英镑/任何东西的数字。
这取决于应用程序。 所有带有小数的计算都将当您将它们输出为美元和美分(或其他任何东西)时需要四舍五入当地货币为):商品的基本价格只能有两个小数点后的数字,但当您添加销售税或增值税时,有会更多,如果您需要计算投资利息,还会有更多。
通常,使用double
结果可获得最准确的结果,然而。。。如果您的软件被用于某种簿记法律要求(例如出于税务目的),您可能需要遵守标准接受的舍入做法,这些做法基于十进制算术,而不是二进制,十六进制或八进制(这是通常的底数对于浮点 - 二进制在所有方面都是通用的,但大型机)。 在这种情况下,您需要使用某种Decimal
类,确保正确的舍入。 用于其他用途(例如风险分析),double
很好。
仅仅因为一个数字不是整数并不意味着它不能被精确计算。考虑到如果计算便士 (美分) 的数量,美元和美分的值就是一个整数,因此对于使用两个精度小数的定点库来说,只需将每个数字乘以 100,作为整数执行计算,然后再次除以 100 是一件简单的事情。
- 通过递归进行因子分解
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 使用libgit2、c++进行pull
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何使用模板函数的函数签名进行SFINAE
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 将模板化的类型与C++中的某些类/类型进行比较
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 对字符串进行位操作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 是否可以对零模板参数进行模板专门化
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 对字符串进行排序时,在c++中处理sort()
- 如果浮点数和双倍数不准确,银行如何进行涉及货币的准确计算