gpt4 book ai didi

f# - 小数与整数相乘 F#

转载 作者:行者123 更新时间:2023-12-02 21:23:19 26 4
gpt4 key购买 nike

我正在学习 f#。考虑这个功能:

let mult (a:decimal) (b:int) : decimal = a * b

当我尝试编译时出现此错误:错误 1 ​​类型约束不匹配。 int 类型与decimal 类型不兼容

为什么编译器不接受这个?

PS:当我显式转换时,它会编译:

let mult (a:decimal) (b:int) : decimal = a * decimal(b)

最佳答案

F# 对数字类型非常严格。造成这种情况的原因有很多。

  1. 精度 - 由于转换为浮点时精度丢失,4.0 * 8.5 可能不完全等于 4*8.5。通过强制您将 4 转换为 4.0,该语言使精度损失变得明显
  2. 类型推断。函数需要有具体的参数类型。如果我们允许从 intfloat 的隐式转换,则本例中的 a 类型将不清楚

    let test a = a + 1.0

    因为 intfloat 都可以是 a 的有效类型。 (可以通过内联函数来避免这种情况,因为内联函数对参数类型的限制较少,并且可以使用一些函数,例如 genericZerogenericOne

  3. 简单。由于没有自动类型转换,因此任何转换都会立即显而易见,并且某些错误变得更容易发现。

关于f# - 小数与整数相乘 F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com