我目前正在学习C++,这个问题刚刚浮现在我的脑海中。我只是好奇,因为我即将开发一个简单的银行程序。我将使用double
来计算美元/利率等,但是计算机计算和人类计算之间存在一些微小的差异。
我想象中,现实世界中的那些额外的.几分钱可能会产生很大的差别!
我目前正在学习C++,这个问题刚刚浮现在我的脑海中。我只是好奇,因为我即将开发一个简单的银行程序。我将使用double
来计算美元/利率等,但是计算机计算和人类计算之间存在一些微小的差异。
我想象中,现实世界中的那些额外的.几分钱可能会产生很大的差别!
Decimal
类型或VB6中的Currency
类型。这些基本上只是整数类型,其中每个人都同意单位是一分钱的一些分数,如$.0001。这取决于应用程序。所有带有小数的计算在输出为美元和分(或本地货币)时都需要四舍五入:一篇文章的基础价格可能只有两位小数,但是当您加上销售税或增值税时,会有更多小数位数,如果您需要计算投资利息,则会有更多小数位数。
通常情况下,使用 double
可以得到最准确的结果,但是……如果您的软件被用于法律要求的某种簿记(例如用于税务目的),则可能需要遵循标准接受的四舍五入实践,而这些实践基于十进制算术,而不是二进制、十六进制或八进制(这些是浮点数的常见基数——除了大型机之外,二进制是普遍适用的)。在这种情况下,您将需要使用某种 Decimal
类,以确保正确的舍入。对于其他用途(例如风险分析),double
就可以了。
仅仅因为一个数字不是整数并不意味着它不能被精确计算。考虑到美元和美分的价值可以通过计算出其对应的美分数量来表示,因此使用两位小数点的定点库只需要将每个数字乘以100,作为整数进行计算,然后再除以100即可。