您能否建议在F#中定义货币类型的最佳方式?
答案 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结束。