如何设计程序以使用.NET执行复杂的财务计算

时间:2009-07-08 21:55:29

标签: .net financial

好吧,我希望这不是一个问题,但我的好奇心让我变得更好。我在一家大型保险公司工作。我们正在建立excel电子表格,处理人寿保险单未来现金价值的预测。这些是相当大的工作簿(40-50mb),有大量的工作表和列,必须考虑到大量的变量才能准确地预测现金价值。

如何将其构建为桌面或业务应用程序?我知道.net对初学者来说相当不错,但是我在电子表格思维之外思考问题以及如何将.net应用于这样的事情。如何在代码中跟踪计算,在电子表格中需要3个或4个页面,每行有600列,每行1300行?以及根据年龄,性别,吸烟者/非吸烟者等投入动态改变影响政策的利率,费用和其他因素......

8 个答案:

答案 0 :(得分:4)

我敢打赌你的公司正在做>每年10亿美元,全部基于Excel电子表格。你并不孤单。

我首先考虑问题而不是Excel电子表格。什么是业务问题?你能用物体建模吗?我看到一些对象:政策,所有随之而来的Coverage和Class children;被保险人,有性别,吸烟者等特征 - 你明白了。

投影听起来像你将会有一些“假设”变量具有一些你会改变的统计特性。你的工作是运行大量的蒙特卡罗模拟,通过从样本中抽取并计算输出来改变变量。您的结果将是具有标准偏差和置信度的预测平均值。

可能是大规模并行计算的理想选择。

计算的基础是什么?你可以分享哪些知名模特?也许那会暗示一下。

答案 1 :(得分:3)

另外,请确保不要使用浮动或双打进行涉及金钱的计算。使用十进制。

答案 2 :(得分:2)

这真是一个简单的问题......答案很复杂。

您在问:我如何规划复杂的软件项目?

了解您的环境(您听起来像这样):

了解软件工程:

了解您的语言/发展环境:


  1. 第一步是弄清楚你是如何以开发人员身份工作的。
  2. 计划您将要或可能采取的步骤。
  3. 简化一切,最简单。
  4. 重温您的行动清单。
  5. 嘲笑它。
  6. 做吧。

  7. 如果你对开始感到紧张,那么我会创建一个简单的功能原型。首先以Balsamiq Mockups之类的方式可视化项目,以便您可以看到每个拼图如何组合在一起。

    如果您花几天时间研究软件工程方法,您将节省数小时的头痛。从那些已经完成了你想要做的事情的那些阿尔法极客们那里获得的优秀实践开始。

答案 3 :(得分:1)

SpreadsheetGear for .NET将允许您在没有Excel的.NET应用程序中直接使用Excel模型,并且每次业务人员想要更新模型时都不会花费大量时间转换为C#或VB。

如果您想亲自试用,可以下载免费试用here

免责声明:我拥有SpreadsheetGear LLC

答案 4 :(得分:0)

你必须一次分解一件事,然后从数据库设计开始。想想基础表。您可以浏览excel中的每个工作表,并考虑如果您获取相关信息并将其放入数据库表中,它会是什么样子。

数据库视图非常适合进行基本数学运算,因为它可以根据许多表进行计算,并以漂亮的格式显示结果。

答案 5 :(得分:0)

这是我采取的方法:

  • 将您的数据(3-4页中包含60列/ 1,300行的内容)存储在数据库或其他数据存储中。
  • 使用DB函数进行计算(从blah中选择sum(foo);),临时表,内存数组,等等
  • 在数据存储中保存计算(以便以后更容易检索和审核)

答案 6 :(得分:0)

考虑一下speadsheets,因为很多事情都在比C#代码更高的抽象层次上工作。

因此,要重新实现.Net中的工作表,您可以采用一些广泛的方法

  1. 自定义临时解决方案,在您的问题域周围有许多狭隘的特定功能
  2. 或者您可以重新实现电子表格的概念。拆分计算引擎,该计算引擎使用持久性和maxtrix值视图中的单元格之间的可选依赖关系来计算表达式矩阵。将数据存储在您喜欢的数据存储区(xml,relationalDB)中,创建一个Web /桌面应用程序来编辑和读取结果,并使用自定义引擎对其进行评估。

答案 7 :(得分:0)

添加一些细节:

  • 单元格值成为数据库中的变量或条目。例如,代替B1的公式= A1 + 2(其中A1包含给定策略的小部件数),您有:

    var widgets = (from policy in db.Policies select new {policy.widgets}).First().widgets;
    var moreWidgets = widgets + 2;

  • 函数和宏被移植 - 例如,Round(B1,0)变为Math.Round(moreWidgets,0,MidpointRounding.AwayFromZero)

  • 相关数据和功能分组为类和对象实例。
  • 表格成为用于存储的数据库表格以及用于UI的标签页/对话框/网页等。
  • 您可以为一次输入/审核的数据制作表单:
  

名字:[________________]
  姓氏:[________________]
        SSN:[________________]

做这一切的好处(假设做得好)是:

  • 改进了组织,以便更容易找到功能以便重复使用/扩充。
  • 改善表现
  • 共享,实时访问数据,包括聚合当前分布在多个文件中的数据。
  • 全新的功能 - 也许你想添加语音合成或者你有什么。