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

F# 如何定义F中的货币类型#,f#,types,F#,Types,你能建议一个用F#定义货币类型的最佳方法吗?使用长的,并在其中存储便士(或十分之一便士) 您可以使用像Decimal这样的类,但这通常会结束。始终使用System.Decimal来存储财务数据! (除非你不在乎误差和舍入误差!) 键入money=int 还没试过看。。。您可以定义任意单位,还是只能使用显式定义的单位 显然你可能会想要 键入money=int (或几十便士,或其他任何东西) 更准确地说 编辑: 小数采用类型,因此您可以将货币定义为: [<Measure>] type

你能建议一个用F#定义货币类型的最佳方法吗?

使用长的,并在其中存储便士(或十分之一便士)


您可以使用像Decimal这样的类,但这通常会结束。

始终使用System.Decimal来存储财务数据! (除非你不在乎误差和舍入误差!)

键入money=int

还没试过看。。。您可以定义任意单位,还是只能使用显式定义的单位

显然你可能会想要

键入money=int
(或几十便士,或其他任何东西)

更准确地说

编辑:

小数采用类型,因此您可以将货币定义为:

[<Measure>]

type = pounds

type money = decimal<pounds>
[]
类型=磅
输入货币=十进制
这可以确保货币不会意外地交叉转换,例如:

如果

balance=decimal

payment=decimal
新余额=余额+付款
将不会编译,您必须将付款转换为十进制

一个根据浮动定义自己的货币类型:

[<Measure>] type money
let money (f:float) = f * 1.<money>
[]输入货币
让钱(f:浮动)=f*1。
F#现在内置了对度量和单位的支持。 该功能的首席工程师Kennedy表示,它的目标是金融应用程序以及其他解决方案

因此,在用F#定义我自己的货币类型之前,我会先看看这一点


Werner

我不明白你的建议:(F#允许定义任意单位。F#允许你定义数字类型的度量单位。因此你可以定义类型length=float,这些单位将通过计算保留下来。请参阅:但是,欢乐的喜悦..你可以将度量单位定义为小数![]类型=美元类型货币=小数2009年5月的CTP,您显然也可以将度量单位应用于整数(虽然我不确定这对金钱有什么帮助)。所以F#度量不会为金融应用程序提供任何额外的好处?是的,但您仍然可以定义小数(或您创建的任何货币度量)在这种情况下,正确性不应该比速度更重要吗?如何使用整数类型来存储最小的单位不准确。这不像使用双精度类型。危险。除了错误的高概率外,当有人说税率是每单位0.001美元时,你可能会遇到问题。我投票赞成这一点,因为我使用的度量单位是美分,而我nt。对于我简单的财务需求来说,这很好。我认为需要根据应用程序的要求定义货币类型。在我的场景中,我可以99.9%的信心说我永远不会使用十分之一个百分点。从答案来看,你的问题需要澄清。你是在谈论度量单位吗(例如,为了不混淆两种不同的货币)或关于小数和舍入问题?我遵循了链接,这是一个示例,不是一个建议。这取决于应用程序,但我相信对于大多数应用程序,接受的答案是可行的。
payment = decimal<dollars>

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