¿Cómo utilizar formatoC para que los números como resultado de una simple operación aritmética sean correctos?
La función formatC()
produce formatos incorrectos de números cuando se pasa una operación aritmética simple como x
.
Ejemplo:
formatC(29, width = 3, format = "d", flag = "0")
> "029"
Esto es correcto. Pero cuando lo hago:
formatC(100*0.29, width = 3, format = "d", flag = "0")
> "028"
¿Que me estoy perdiendo aqui? (R versión 4.3.2 (2023-10-31 ucrt))
Tu estas usando format = "d"
. Los documentos establecen las diversas opciones para el format
argumento:
igual a
"d"
(para números enteros),"f"
,"e"
,"E"
,"g"
, ("G"
para"fg"
reales) o"s"
(para cadenas). El valor predeterminado es"d"
para números enteros,"g"
para reales.
R no almacena ni ni como un número entero y no son iguales 29
. 0.29 * 100
Puedes ver esto aquí:
class(29) # numeric
class(29L) # integer
sprintf("%.20f", 29)
# [1] "29.00000000000000000000"
sprintf("%.20f", 100 * 0.29)
# [1] "28.99999999999999644729"
Usar formato de entero es truncar el segundo valor a 28. Use un formato apropiado para reales, por ejemplo:
formatC(100 * 0.29, width = 3, format = "g", flag = "0")
# [1] "029"
Para obtener más información sobre por qué ocurre esto, consulte: ¿ Por qué estos números no son iguales?