¿Cómo utilizar formatoC para que los números como resultado de una simple operación aritmética sean correctos?

Resuelto mafiale asked hace 55 años • 1 respuestas

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))

mafiale avatar Jan 01 '70 08:01 mafiale
Aceptado

Tu estas usando format = "d". Los documentos establecen las diversas opciones para el formatargumento:

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 * 100Puedes 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?

SamR avatar Feb 16 '2024 14:02 SamR