如何在 F# 中使用 printf/sprintf 将十进制格式化为具有定义精度的字符串?

Inf*_*num 6 string format printf f# decimal

我想在 F# 中将十进制值格式化为具有定义精度的字符串。使用 printf/sprintf 时,我得到:

let sdecimal = sprintf "%.2M" 0.1234M;;
Run Code Online (Sandbox Code Playgroud)

val sdecimal : string = "0.1234"

而对于浮动它的工作原理。

let sfloat = sprintf "%.2f" 0.1234;;
Run Code Online (Sandbox Code Playgroud)

val sfloat : 字符串 = "0.12"

似乎我必须先将它转换为浮点,这既冗长又不符合犹太教规。

有没有比使用 C# 的 .ToString() 格式更简单的方法?

Inf*_*num 6

好的。如果格式是浮动的,它会起作用:

let sfdecimal = sprintf "%.2f" 0.1234M;;
Run Code Online (Sandbox Code Playgroud)

val sfdecimal : 字符串 = "0.12"

正如@scrwtp在评论中指出的那样,类型信息仍然保留。

  • 严格来说这不是真的 - 格式说明符仍然是类型检查的,只是映射不是一对一的。`%f` 匹配任何浮点类型(`Single`、`Double`、`Decimal`)但不匹配 `int` 等。`String.Format` 忽略类型信息。 (2认同)