Utilizzando il seguente frammento di codice:Haskell: Forza galleggianti di avere due decimali
(fromIntegral 100)/10.00
Utilizzando il preludio standard di Haskell '98, come faccio io rappresento il risultato con due decimali?
Grazie.
Utilizzando il seguente frammento di codice:Haskell: Forza galleggianti di avere due decimali
(fromIntegral 100)/10.00
Utilizzando il preludio standard di Haskell '98, come faccio io rappresento il risultato con due decimali?
Grazie.
Solo per la cronaca:
import Numeric
formatFloatN floatNum numOfDecimals = showFFloat (Just numOfDecimals) floatNum ""
IMO questa risposta dovrebbe essere accettata. –
@NikitaVolkov Fatto. Meglio tardi che mai ;-) – Anders
È possibile utilizzare printf :: PrintfType r => String -> r
da 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
formatta il secondo argomento come un numero in virgola mobile. %.2f
indica che devono essere stampate solo due cifre dietro la virgola decimale. \n
rappresenta una nuova riga. Non è strettamente necessario per questo esempio.
Si noti che questa funzione restituisce un valore di tipo String
o IO a
, a seconda del contesto. Dimostrazione:
Prelude Text.Printf> printf "%.2f" (1337 :: Float) ++ " is a number"
"1337.00 is a number"
In questo caso printf
restituisce la stringa "1337.00"
, perché il risultato viene passato come argomento a (++)
, che è una funzione che prevede Lista argomenti (notare che String
è la stessa [Char]
). Pertanto, printf
si comporta anche come sprintf
in altre lingue. Ovviamente non è necessario un trucco come aggiungere una seconda stringa. Si può solo specificare in modo esplicito il tipo:
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: IO a
1337.00
Prelude Text.Printf> printf "%.2f\n" (1337 :: Float) :: String
"1337.00\n"
Riformulerò la domanda :-) Voglio restituire una rappresentazione in formato stringa di un float con esattamente due decimani - non stamparlo sullo stdout. Non riesco a trovare nulla di concreto su una funzione di "sprint" in Haskell come speravo. Eventuali suggerimenti? – Anders
Buon punto. Ho aggiornato la mia risposta. – Stephan202
Prova ad arrotondare e poi a stampare il float? –
E 'dovrebbe essere rappresentato come una stringa. Cioè 10.00. – Anders