f# - 如何使用 sprintf 格式化一个以逗号作为千位分隔符的整数

标签 f# inline

如何使用 sprintf 格式化整数以将逗号显示为千位分隔符?

我知道如何使用 String.Format 来做到这一点,但我找不到使用 sprintf 的方法。

编辑:根据下面 Fyodor Soikin 的评论,我尝试了以下代码:

printf "%a" (fun writer (value:int) -> writer.Write("{0:#,#}", value)) 10042
let s = sprintf "%a" (fun writer (value:int) -> writer.Write("{0:#,#}", value)) 10042

printf 调用有效(但写入标准输出,而我想获得一个字符串,例如,我可以分配给 WPF 控件的 Text 或 Content 属性)。

sprintf 调用失败并出现错误 FS0039:未定义字段、构造函数或成员“Write”。

如果我能修复这个错误,那么这可能是最直接的解决方案,并且与部分应用程序结合使用时会像内置版本一样简洁。

最佳答案

由于您不能使用 Printf 模块执行此操作,因此我这样做:

/// Calls ToString on the given object, passing in a format-string value.
let inline stringf format (x : ^a) = 
    (^a : (member ToString : string -> string) (x, format))

然后这样称呼它:
someNumber |> stringf "N0"

关于f# - 如何使用 sprintf 格式化一个以逗号作为千位分隔符的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272674/

相关文章:

c++ - 如何将数组从 perl 传递到内联 C++?

f# - 在 F# 中使用 `inline`

c - 为什么下面的函数没有被内联?

.net - ILGenerator 方法内联

F# 异步工作流

f# - 将代码从 Lisp 转换为 F#

f# - 是否有构建二维数组的简写方法?

f# - OCaml 函数少传入一个参数

asp.net - 如何在 F# 中制作使用连字符的 Controller ?

html - 使用 "display:inline-block"但我的 DIV 仍出现在新行上