8

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

我想现实世界中那些额外的 .pennies 可以让一切变得不同!

4

4 回答 4

13

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

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

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

于 2012-06-18T16:10:01.583 回答
1

8 字节长的范围是:-9223372036854775808 最大值:9223372036854775807 以数千美分/美分的价格完成所有操作,您仍然可以处理高达数万亿美元/磅/任何数量的数字。

于 2012-06-18T16:23:23.410 回答
1

这取决于应用程序。当您以美元和美分(或任何当地货币)输出时,所有带小数的计算都需要四舍五入:文章的基本价格可能只有小数点后两位数,但当您加上销售税或增值税时,有会更多,如果您需要计算投资利息,还会更多。

一般来说,使用double结果会得到最准确的结果,但是……如果您的软件被用于法律要求的某种簿记(例如,出于税收目的),您可能需要遵循公认的标准舍入做法,这些做法是基于在十进制算术上,而不是二进制、十六进制或八进制(这是浮点的常用基础——二进制在除大型机之外的所有东西上都是通用的)。在这种情况下,您需要使用某种Decimal 类来确保正确的舍入。对于其他用途(例如风险分析),double很好。

于 2012-06-18T17:30:06.510 回答
0

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

于 2012-06-18T16:12:53.300 回答