如果浮点数和双倍数不准确,银行如何进行涉及货币的准确计算

If float and double are not accurate, how do banks perform accurate calculations involving money?

本文关键字:何进行 货币 计算 浮点数 不准确 如果      更新时间:2023-10-16

目前正在学习C++,这刚刚发生在我身上。 我只是对此感到好奇,因为我即将开发一个简单的银行程序。 我将使用double来计算美元/利率等,但计算机计算和人工计算之间存在一些细微差异。

我想现实世界中那些额外的 .pennie 可以改变一切!

在许多情况下,财务计算是使用定点算术而不是浮点法完成的。

例如,.NET Decimal 类型或 VB6 Currency类型。 这些基本上只是整数类型,每个人都同意单位是几分之一美分,例如 $.0001。

是的,

必须进行一些四舍五入,但它是非常系统地完成的。 通常,四舍五入规则位于合约细则的深处(利率为x%,每T复利一次,四舍五入到最接近的便士,但每个报表期不少于$y)。

8 字节长的范围是:-9223372036854775808 max:9223372036854775807做所有事情都像几美分/便士一样,你仍然可以处理高达数万亿美元/英镑/任何东西的数字。

这取决于应用程序。 所有带有小数的计算都将当您将它们输出为美元和美分(或其他任何东西)时需要四舍五入当地货币为):商品的基本价格只能有两个小数点后的数字,但当您添加销售税或增值税时,有会更多,如果您需要计算投资利息,还会有更多。

通常,使用double结果可获得最准确的结果,然而。。。如果您的软件被用于某种簿记法律要求(例如出于税务目的),您可能需要遵守标准接受的舍入做法,这些做法基于十进制算术,而不是二进制,十六进制或八进制(这是通常的底数对于浮点 - 二进制在所有方面都是通用的,但大型机)。 在这种情况下,您需要使用某种Decimal类,确保正确的舍入。 用于其他用途(例如风险分析),double很好。

仅仅因为一个数字不是整数并不意味着它不能被精确计算。考虑到如果计算便士 (美分) 的数量,美元和美分的值就是一个整数,因此对于使用两个精度小数的定点库来说,只需将每个数字乘以 100,作为整数执行计算,然后再次除以 100 是一件简单的事情。