2009-05-21 47 views
5

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

+1

从答案来看,您的问题需要澄清。您是在谈论计量单位(例如,不要混淆两种不同的货币),还是关于小数和舍入问题? – Benjol 2009-05-25 08:34:32

回答

0

使用很长时间,并在其中存储便士(或十分之一便士)。

您可以使用类似十进制的类,但通常会结束being quite slow

+0

在这种情况下,不应该比速度更重要吗? – 2009-05-21 14:13:38

+0

如何使用整数类型来存储最小单位不准确。它不像使用双重类型。 – gbjbaanb 2009-05-21 14:42:27

+1

危险。除了错误的可能性很高之外,当有人说税率为每件0.001美元时,您可能会遇到问题。 – 2009-06-04 00:32:23

4

类型的钱= INT <dollars>

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

显然,你一定希望

类型的钱= INT <thousandths_of_currency> (或硬币,或任何数万)。

为了更加准确。

编辑:

小数取类型,所以你可以定义钱:

[<Measure>] 

type = pounds 

type money = decimal<pounds> 

这可以确保货币都无法跨越意外转换,例如:

如果

balance = decimal<pounds> 

and

payment = decimal<dollars> 

newbalance = balance + payment 

不会编译,你就必须支付转换为decimal<pounds>

2

Luca Bolognese suggests一个基于关浮动的定义自己的钱类型:

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

F#现在已经内置支持措施和单位。 根据此功能的首席工程师,肯尼迪的目标是在其他解决方案中的金融应用程序。

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

沃纳