Utilisation de l'extrait de code suivant:Haskell: Force flotte pour avoir deux décimales
(fromIntegral 100)/10.00
Utilisation du Haskell '98 prélude standard, comment puis-je représente le résultat avec deux décimales?
Merci.
Utilisation de l'extrait de code suivant:Haskell: Force flotte pour avoir deux décimales
(fromIntegral 100)/10.00
Utilisation du Haskell '98 prélude standard, comment puis-je représente le résultat avec deux décimales?
Merci.
Pour la petite histoire:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
OMI cette réponse devrait être acceptée. –
@NikitaVolkov Fait. Mieux vaut tard que jamais ;-) – Anders
Vous pouvez utiliser printf :: PrintfType r => String -> r
de Text.Printf
:
Prelude> import Text.Printf
Prelude Text.Printf> printf "%.2f\n" (100 :: Float)
100.00
Prelude Text.Printf> printf "%.2f\n" $ fromIntegral 100/10.00
10.00
%f
formate le second argument comme un nombre à virgule flottante. %.2f
indique que seulement deux chiffres derrière la virgule décimale doivent être imprimés. \n
représente une nouvelle ligne. Ce n'est pas strictement nécessaire pour cet exemple. Notez que cette fonction renvoie une valeur de type String
ou IO a
, en fonction du contexte. Démonstration:
Prelude Text.Printf> printf "%.2f" (1337 :: Float) ++ " is a number"
"1337.00 is a number"
Dans ce cas printf
renvoie la chaîne "1337.00"
, parce que le résultat est passé comme argument à (++)
, qui est une fonction qui attend les arguments de la liste (notez que String
est le même que [Char]
). En tant que tel, printf
se comporte également comme sprintf
dans d'autres langues. Bien sûr, une astuce comme l'ajout d'une deuxième chaîne n'est pas nécessaire. Vous pouvez simplement spécifier explicitement le type:
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: IO a
1337.00
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: String
"1337.00\n"
Je vais reformuler la question :-) Je veux retourner une représentation sous forme de chaîne d'un float avec exactement deux décimans - pas l'imprimer sur stdout. Je ne trouve rien de concret sur une fonction 'sprintf' à Haskell comme je l'espérais. Des indices? – Anders
Bon point. J'ai mis à jour ma réponse. – Stephan202
Essayez d'arrondir puis d'imprimer le flotteur? –
Il est censé être représenté comme une chaîne. C'est à dire. 10.00. – Anders