我们正在用VB.NET和SQL Server重写我们的旧会计系统.我们引入了一个新的.NET/SQL程序员团队来进行重写.大多数系统已经使用Floats完成了Dollar数量.我编程的遗留系统语言没有Float,所以我可能会使用Decimal.
你有什么建议?
Float或Decimal数据类型应该用于美元金额吗?
两者的优点和缺点有哪些?
在我们的日常scrum中提到的一个骗局是,当你计算一个返回超过两个小数位的结果的金额时,你必须要小心.听起来你必须将金额四舍五入到小数点后两位.
另一个Con是所有显示和打印金额必须有一个显示两个小数位的格式声明.我注意到有几次没有这样做,金额看起来不正确.(即10.2或10.2546)
专家是Float只占用磁盘上的8个字节,其中Decimal占用9个字节(十进制12,2)
有没有人知道或有任何链接到网站,描述如何为双重记账系统设计数据库模式的细节?
我确实找到了一堆文章,但非常非常清楚.如果有人可以帮助我,我将不胜感激.
是否有适用于包含财务会计功能的软件的设计模式或其他最佳实践的良好资源(书籍,权威指南等)?
具体而言,关于处理问题的良好信息在哪里,如下所示:
注意:"权威"或其他广泛接受的信息是我们在这里寻找的.否则,这将变成人们尝试过的所有事物的轶事大列表,使主题非常主观.
早在十月,Kristopher Johnson就会计软件设计模式提出了问题
他收到了几个答案,但他们基本上都是一样的,指向Martin Fowlers会计模式.
我真的没有找到有用的福勒模式.对于一个更简单的会计系统来说,它们似乎过于复杂,所以我正在重复Kristopher的问题并寻找更多的选择,最好是对于较小的系统.
这主要是基于现金的系统,其中向用户提供类似于银行的账户.他们可以登录(基于网络)并查看余额,进行某些交易等.
我想它会比Paypal或信用卡公司更像银行,但规模较小.它不必处理税收,摊销或您在完全成熟的会计系统中看到的任何事情.只是平衡和交易.
那么,任何人都可以指出基于会计的软件设计的任何额外资源,甚至是简单会计系统的良好实现吗?
我的任务是帮助一些会计师解决他们遇到的常见问题 - 给出交易清单和总存款,哪些交易是存款的一部分?例如,假设我有这个数字列表:
1.00
2.50
3.75
8.00
Run Code Online (Sandbox Code Playgroud)
我知道,我的存款总额是10.50
,我可以很容易地看到它弥补了中8.00
和2.50
交易.然而,鉴于一百笔交易和数百万美元的存款,它很快变得更加困难.
在测试蛮力解决方案(花费太长时间以实现)时,我有两个问题:
有了大约60个数字的列表,它似乎找到了十几个或更多的组合,任何合理的总数.我期待一个单一的组合来满足我的总数,或者可能是一些可能性,但似乎总是有很多组合.是否有一个数学原理描述了为什么会这样?看来,即使是中等大小的随机数集合,您也可以找到多个组合,几乎可以达到您想要的总数.
我为这个问题建立了一个强力解决方案,但它显然是O(n!),并且很快失控.除了明显的快捷方式(排除大于总数的快捷方式),有没有办法缩短计算时间?
我当前(超慢)解决方案的详细信息:
详细信息量列表从最大到最小排序,然后以下过程以递归方式运行:
通过这种方式,它可以快速排除较大的数字,将列表缩小到只需要考虑的数字.但是,它仍然是n!似乎永远不会完成更大的列表,所以我对我可以采取的任何快捷方式感兴趣 - 我怀疑即使从列表中删除1个数字也会将计算时间缩短一半.
谢谢你的帮助!
假设有一家银行、一家大型商店等,希望正确地为内部帐户和跟踪客户帐户进行会计处理。而不是实现满足当前简单而狭隘的要求,这将是“家酿”:结果证明这些只是当前简单要求的临时拐杖,并且在出现新要求时很难或不可能扩展。
据我了解,复式记账法是一种行之有效的方法,可满足所有会计和审计要求,包括目前未考虑的要求。如果实施,它将:
我研究了另一个问题的答案:简单银行账户的衍生账户余额与存储账户余额?,它为内部帐户提供了很好的信息。需要一个数据模型,以便理解实体;他们的互动;他们的关系,@PerformanceDBA 已经给出了这一点。该模型取自该答案:
虽然这对于简单的内部账户来说是令人满意的,但我需要看到一个提供完整复式记账方法的数据模型。
需要添加的文章是Journal
; 内部 vs 外部Transactions
;等等..
理想情况下,我想看看这些双条目行在数据库方面的样子,整个过程在 SQL 中的样子,在每种情况下哪些实体受到影响等等。案例如下:
让我们称之为System
而不是Bank
,Bank
可能太复杂而无法建模,让问题是关于使用帐户和资产操作的假想系统。客户与系统(存款、取款、后期费用、批量费用)以及彼此之间(转账)执行一组操作。
我需要为我正在构建的程序编写一个会计例程,它将给出一个十进制的偶数除以整数.例如:
$143.13 / 5 =
28.62
28.62
28.63
28.63
28.63
Run Code Online (Sandbox Code Playgroud)
我在这里看过这篇文章:在c#中均匀划分,但似乎它只适用于整数除法.想知道这个问题的优雅解决方案吗?
将事务存储到数据库中时
1)您是否将信用卡和借记卡存放在两个不同列的同一记录中?(没有正号或负号)
例1A
TABLENAME
...
...
(Credit) null
(Debit) 100
Run Code Online (Sandbox Code Playgroud)
例1B
TABLENAME
...
...
(Credit) 250
(Debit) null
Run Code Online (Sandbox Code Playgroud)
要么
2)您存储1个信用积分值和借记负号吗?
例2A
TABLENAME
...
...
(Amount) -100
Run Code Online (Sandbox Code Playgroud)
实施例2B
TABLENAME
...
...
(Amount) 250
Run Code Online (Sandbox Code Playgroud) accounting ×10
sql-server ×3
c# ×2
database ×2
algorithm ×1
currency ×1
division ×1
java ×1
math ×1
nested-loops ×1
sql ×1
transactions ×1
vb.net ×1