gpt4 book ai didi

haskell - 在 Haskell 中从 Double 转换为 Fix 的正确方法是什么?

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

我有一些使用 Centi 的代码其货币类型。它使用xlsx从Excel电子表格接收Double。包裹。我想将这些Double正确转换为Centi。我尝试过使用 realToFrac,并且在大多数情况下它都有效,但偶尔会出现一点问题:

λ realToFrac (-1372.92 :: Double) :: Centi
-1372.93

我可以猜测问题在于该十进制数字的二进制表示形式不准确,并且我首先不应该使用 Double 来表示货币,但我不这样做无法控制那部分。那么进行转换的万无一失的方法是什么?

最佳答案

也许不是最好的方法,但一个是 round调整所需精度后到最接近的整数:

floatToCenti :: Double -> Centi
floatToCenti = floatToFixed

floatToFixed :: HasResolution a => Double -> Fixed a
floatToFixed x = y where
y = MkFixed (round (fromInteger (resolution y) * x))
-- reusing y as the dummy argument of resolution

关于haskell - 在 Haskell 中从 Double 转换为 Fix 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60908557/

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