gpt4 book ai didi

sql-server - 使用 float 还是小数来计算会计应用程序的美元金额?

转载 作者:行者123 更新时间:2023-12-01 17:17:43 24 4
gpt4 key购买 nike

我们正在重写我们的遗产accounting system在 VB.NET 和 SQL Server 中。我们引入了一个新的 .NET/SQL 程序员团队来进行重写。系统的大部分已经完成,美元金额使用 float 。我编程时使用的旧系统语言没有 float ,因此我可能会使用小数。

你的建议是什么?

美元金额应该使用 float 还是小数数据类型?

两者都有哪些优点和缺点?

我们的 daily scrum 中提到的一个骗局当您计算返回的结果超过两位小数的金额时,您必须小心。听起来您必须将金额四舍五入到小数点后两位。

另一个缺点是所有显示和打印的金额都必须有一个显示两位小数的格式声明。我注意到有几次没有这样做并且金额看起来不正确。 (即 10.2 或 10.2546)

pro 是仅浮点方法,在磁盘上占用 8 个字节,其中小数将占用 9 个字节(十进制 12,2)。

最佳答案

Should Float or Decimal data type be used for dollar amounts?

答案很简单。永远不会漂浮。 永远!

float 依据IEEE 754始终为二进制,仅新标准 IEEE 754R定义的十进制格式。许多小数二进制部分永远无法等于精确的十进制表示形式。

任何二进制数都可以写成m/2^n(m, n正整数),任何十进制数可以写成 >m/(2^n*5^n)。由于二进制缺少素数因子 5,所有二进制数都可以用小数精确表示,但反之则不然。

0.3 = 3/(2^1 * 5^1) = 0.3

0.3 = [0.25/0.5] [0.25/0.375] [0.25/3.125] [0.2825/3.125]

1/4 1/8 1/16 1/32

所以你最终会得到一个比给定的十进制数更高或更低的数字。永远。

为什么这很重要?四舍五入。

正常舍入意味着向下 0..4,向上 5..9。所以结果是否确实很重要0.049999999999.... 或 0.0500000000... 您可能知道这意味着 5 美分,但计算机不知道这一点并舍入 0.4999 code>... 向下(错误)和 0.5000... 向上(正确)。

鉴于浮点计算的结果总是包含小误差项,这个决定纯粹是运气。如果您想用二进制数进行十进制舍入到偶数处理,那就没有希望了。

不相信?您坚持认为您的账户系统一切正常? Assets 和负债相等吗?好的,然后取出每个条目的给定格式化数字,解析它们并用独立的十进制系统将它们求和!

将其与格式化的总和进行比较。糟糕,出了点问题,不是吗?

For that calculation, extreme accuracy and fidelity was required (we used Oracle'sFLOAT) so we could record the "billionth's of a penny" being accured.

它无助于解决此错误。因为所有人都会自动认为计算机的求和是正确的,并且实际上没有人独立检查。

关于sql-server - 使用 float 还是小数来计算会计应用程序的美元金额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com