你能否建议一种最佳的方法在F#中定义货币类型?
始终、一定要使用System.Decimal来存储财务数据!(除非你不关心不准确和舍入误差的情况!) https://learn.microsoft.com/dotnet/api/system.decimal
类型 money = int<美元>
?
还没有尝试过,你能定义任意单位吗,还是只能使用明确定义的单位?
显然,你可能想要:
类型 money = int<货币的千分之一>
(或者是一角钱,或其他什么)。
为了更加准确。
编辑:
小数可以有类型,因此您可以将货币定义为:
[<Measure>]
type = pounds
type money = decimal<pounds>
这可以确保货币不会因意外而交叉转换,例如:
如果
balance = decimal<pounds>
并且
payment = decimal<dollars>
newbalance = balance + payment
如果不进行转换,代码将无法编译,你需要将payment转换为decimal<pounds>
Luca Bolognese建议基于float类型定义自己的Money类型:
[<Measure>] type money
let money (f:float) = f * 1.<money>
F# 现在内置支持度量和单位。 根据此特性的主要工程师 Kennedy,它是针对金融应用等解决方案的。
因此,在 F# 中定义自己的货币类型之前,我建议先看一下这个特性。
Werner
使用 long 类型,并在其中存储便士(或十分之一便士)。
你可以使用 Decimal 这样的类,但通常会非常慢。