Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何使用货币为实体建模?_F#_Domain Modelling - Fatal编程技术网

F# 如何使用货币为实体建模?

F# 如何使用货币为实体建模?,f#,domain-modelling,F#,Domain Modelling,我试图用一种货币计量单位,用F#来模拟一个债券实体 type Bond = { Isin: string Issuer: string Maturity: DateTime Price: float<???> } 我可以选择价格作为浮动,价格货币作为字符串,甚至是货币类型,但我认为这并不理想。 有什么想法吗?我不认为F#度量单位适合这个用例,因为编译器不知道货币表。如果仍要使用度量单位,则必须将每种货币硬编码到源代码中,如下所示: 开放系统

我试图用一种货币计量单位,用F#来模拟一个债券实体

type Bond = {
     Isin: string
     Issuer: string
     Maturity: DateTime
     Price: float<???>
}
我可以选择价格作为浮动,价格货币作为字符串,甚至是货币类型,但我认为这并不理想。 有什么想法吗?

我不认为F#度量单位适合这个用例,因为编译器不知道货币表。如果仍要使用度量单位,则必须将每种货币硬编码到源代码中,如下所示:

开放系统
[]美元类型
[]类型磅
类型键=
{
伊辛:字符串
发行人:字符串
到期日:日期时间
}
多拉邦德型=
{
邦德:邦德
价格:浮动
}
庞德邦德型=
{
邦德:邦德
价格:浮动
}
让英镑/美元=0.73
让toPoundBond(DollaBond:DollaBond)=
{
邦德=美元邦德
价格=美元本币价格*英镑/美元
}
让多拉邦德:多拉邦德=
{
债券={
Isin=“我的Isin”
发卡机构=“我的发卡机构”
到期日=DateTime.Parse(“1/1/2050”)
}
价格=1000.0
}

printfn“%A”通常货币计算需要比
float
类型提供的精度更高的精度,因此开发人员转而使用.Fair point Scott。问题的重点是如何将度量单位用作货币。如果您将s
type Price
定义为十进制货币和可用货币的有区别的联合体,那么代码将更加清晰。如果您将
Price:Price
添加到
Bond
类型中,您可以跳过DollarBond和PoundBondSure,这可能会更好。我主要是想说明在这种情况下使用计量单位的问题。是的,当然。即使可能,运行时计量单位也会有点违背他们自己的目的。我只是觉得一个更简洁的代码示例可以将更多的注意力放在真正的问题上。谢谢@brianberns。看起来UOM不是最适合这个……Thanasik别忘了货币兑换率会随着时间的推移而变化。这里给出的将美元债券转换为英镑债券的例子在现实生活中并不特别有用。考虑一下英国的一个投资者如何真正地考虑一个以美元计价的债券:购买成本、任何利息支付、销售或赎回的收益都将以不同的利率转换,而在任何给定时间,资产负债表上的债券价值都会被转换。
type Currency = {
    Code : string
    Name : string
}