Haskell:带逗号的格式号

时间:2010-09-20 15:23:17

标签: haskell

是否有库函数将逗号放入Haskell的数字中?

我想要一个可以这样工作的函数:

format 1000000 = "1,000,000"
format 1045.31 = "1,045.31"

但我似乎无法在Haskell中找到此类型的任何数字格式化函数。数字格式化功能在哪里?

6 个答案:

答案 0 :(得分:9)

也许您可以使用Data.Split中的一些函数:

http://hackage.haskell.org/cgi-bin/hackage-scripts/package/split

我知道这不是你想要的,但你可以使用Data.List.intersperse

http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Data-List.html#v:intersperse

编辑:这样做你想要的,虽然我知道你想要一个库函数,但这可能就像你得到的那样接近(请原谅我糟糕的编码风格):

import Data.List.Split
import Data.List

format x = h++t
    where
        sp = break (== '.') $ show x
        h = reverse (intercalate "," $ splitEvery 3 $ reverse $ fst sp) 
        t = snd sp

答案 1 :(得分:1)

使用格式数字库

Prelude> import Data.Text.Format.Numbers
Prelude Data.Text.Format.Numbers> prettyF (PrettyCfg 2 (Just ',') '.') 2132871293.3412
"2,132,871,293.34"

答案 2 :(得分:0)

(来自hier:http://bluebones.net/2007/02/formatting-decimals-in-haskell/

格式化Haskell中的小数

格式化函数,在Haskell中从333999333.33到“333,999,999.33”等数字。应对负数和舍入到2 dp(如果你愿意,很容易添加一个参数)。

示例:

*主> formatDecimal 44

“44.00”

*主> formatDecimal 94280943.4324

“94,280,943.43”

*主> formatDecimal(-89438.329)

“ - 89,438.33”

import Data.Graph.Inductive.Query.Monad (mapFst)
import List
import Text.Printf

formatDecimal d
    | d < 0.0   = "-" ++ (formatPositiveDecimal (-d))
    | otherwise = formatPositiveDecimal d
    where formatPositiveDecimal = uncurry (++) . mapFst addCommas . span (/= '.') . printf "%0.2f"
          addCommas = reverse . concat . intersperse "," . unfoldr splitIntoBlocksOfThree . reverse
          splitIntoBlocksOfThree l = case splitAt 3 l of ([], _) -> Nothing; p-> Just p

答案 3 :(得分:0)

我自己也遇到过这个问题。我非常务实的解决方案(使用Text as T)是这样的:

T.replace (T.singleton '.') (T.singleton ',') $
T.pack $
showFixed False 42.0
但是,

对分隔符不起作用。那对我很好。

对我来说,除非有办法设置,否则Locale没有帮助。

答案 4 :(得分:0)

我正在使用的另一种解决方案:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
        at java.util.ArrayList.rangeCheck(Unknown Source)
        at java.util.ArrayList.get(Unknown Source)
        at estaticos.Criptografador.descompilarMapaData(Criptografador.java:152)
        at variables.Mapa.<init>(Mapa.java:1306)
        at estaticos.GestorSQL.CARREGAR_MAPAS(GestorSQL.java:696)
        at estaticos.MundoDofus.criarServer(MundoDofus.java:1398)
        at estaticos.VrauEMU.main(VrauEMU.java:130)

答案 5 :(得分:-1)