Elmで数値をフォーマットする際は elm-format-number というパッケージが便利です。
$ elm install cuducos/elm-format-number
パッケージには、
- usLocale ( 12,345.67 )
- spanishLocale ( 12.345,67 )
- frenchLocale ( 12 345,67 )
というフォーマットがあらかじめ用意されているので、適宜選択してください。
※基本的に usLocale
になると思います
module Main exposing (main)
import FormatNumber exposing (format)
import FormatNumber.Locales exposing (usLocale)
import Html exposing (text)
main =
text (format usLocale 12345.67)
フォーマットをカスタマイズする方法
基本的に usLocale
を利用すれば問題ないのですが、
小数点以下を表示したくない
という場合には、フォーマットをカスタマイズする必要があります。
import FormatNumber exposing (format)
import FormatNumber.Locales exposing (Decimals(..), Locale, usLocale)
main =
text ( format customeLocale 12345.67 ) -> 12345
-- Locale型を返す関数を定義する
customeLocale : Locale
customeLocale =
-- usLocaleをひな形とし、小数点以下の桁数を0にする
{ usLocale| decimals = Exact 0 }
また、cuducos/elm-format-number
パッケージは、小数点以下の切り捨てなどをサポートしていないためフォーマット前に、
- Elmコアの
floor
関数 - myrho/elm-round の
floorNumCom
関数
あたりを使用する必要があります。
サンプルコードに実装例もあるので、ぜひ参考にしてください。
サンプルコード
module NumberFormat exposing (main)
import FormatNumber exposing (format)
import FormatNumber.Locales exposing (Decimals(..), Locale, frenchLocale, spanishLocale, usLocale)
import Html exposing (Html, li, text, ul)
import Round
main : Html.Html msg
main =
ul []
[ li [] [ text ("us: " ++ format usLocale 12345.67) ]
, li [] [ text ("spanish: " ++ format spanishLocale 12345.67) ]
, li [] [ text ("french: " ++ format frenchLocale 12345.67) ]
, li [] [ text ("custom: " ++ format integerLocale 12345.67) ]
, li [] [ text ("custom floor: " ++ (format integerLocale <| toFloat <| floor 12345.67)) ]
, li [] [ text ("custom floor float: " ++ (format floatLocale <| Round.floorNumCom 1 12345.67)) ]
]
integerLocale : Locale
integerLocale =
{ usLocale | decimals = Exact 0 }
floatLocale : Locale
floatLocale =
{ usLocale | decimals = Min 0 }