你如何定义F#中的货币类型

时间:2009-05-21 13:21:32

标签: f# types

您能否建议在F#中定义货币类型的最佳方式?

5 个答案:

答案 0 :(得分:11)

始终,始终使用System.Decimal存储财务数据! (除非你不关心准确性和舍入错误!) http://msdn.microsoft.com/en-us/library/364x0z75(VS.71).aspx

答案 1 :(得分:4)

输入money = int <dollars>

甚至没有试过看...你能定义任意单位,还是只能用明确定义的单位?

显然你可能想要

输入money = int <thousandths_of_currency> (或几十便士,或其他)。

更准确。

编辑:

十进制采用类型,因此您可以将货币定义为:

[<Measure>]

type = pounds

type money = decimal<pounds>

可以确保货币不会意外交叉转换,例如:

如果

balance = decimal<pounds>

payment = decimal<dollars>

newbalance = balance + payment

无法编译,您必须将付款转换为decimal<pounds>

答案 2 :(得分:2)

Luca Bolognese suggests根据浮动来定义自己的Money类型:

[<Measure>] type money
let money (f:float) = f * 1.<money>

答案 3 :(得分:1)

现在,F#内置了对度量和单位的支持。 根据此功能的首席工程师,肯尼迪的目标是财务应用程序以及其他解决方案。

所以我会在F#中定义自己的钱类型之前先看一下。

沃纳

答案 4 :(得分:0)

使用一个长的,并存储便士(或一分钱的十分之一)。

你可以使用像Decimal这样的类,但通常会以being quite slow结束。