gpt4 book ai didi

haskell - 为什么 Rational 没有 printf 格式化程序?

转载 作者:行者123 更新时间:2023-12-02 12:14:02 25 4
gpt4 key购买 nike

可以使用 %sshow 简单地将 Rational 包含在 printf 输出中:

> printf "... %s ...\n" (show $ 123 % 456)
... 41 % 152 ...

但是,如果能够使用 %f 格式代码也会很有用:

> printf "... %.30f ...\n" (123 % 456)
... 0.269736842105263157894736842105 ...

请注意,通过转换为Double(例如使用fromRational)进行格式化将不允许我正在寻找的任意精度:

> printf "... %.30f ...\n" (fromRational $ 123 % 456)
... 0.269736842105263160000000000000 ...

%v 代码可用于生成与 show 相同的输出,并且可能允许使用一些修饰符。

是否有任何理由不应该使用自定义格式化程序(PrintfArg (Ratio a) 的实例)来完成此操作?

作为引用,这是我用作部分解决方法的独立函数:

showDecimal :: RealFrac a => Int -> a -> String
showDecimal n r = printf "%d.%0*d" (i :: Integer) n (abs d :: Integer)
where (i, d) = (round $ r * 10^n) `quotRem` (10^n)

> printf "... %35s ...\n" (showDecimal 30 $ 123 % 456)
... 0.269736842105263157894736842105 ...

但是,这不允许使用修饰符,并且涉及在不同位置指定宽度。

最佳答案

评论中的共识似乎是,因为没有人抽出时间来写一个,而且这似乎是一个好主意

我正在回答我自己的问题,因此可以将其标记为已回答。如果我或其他人有时间实现它,我会添加评论。

关于haskell - 为什么 Rational 没有 printf 格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51755686/

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