es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

as.character() conduce a pérdida de precisión numérica cuando se transforma una cadena en un número.

En R, quiero ejecutar el siguiente código:

str <- “2811.1019192874087”
val <- as.numeric(str)
str2 <- as.character(val)
print(str2)
print(val)

Esto imprime:

“2811.10191928741”
2811.102

Pero quiero:

“2811.1019192874087”
2811.102

En resumen, me gustaría que la precisión no se perdiera con as.character(). Ya he intentado usar options(digits = x) donde x es un número de mi elección, pero esto solo cambia la salida y no el valor en sí. También intenté usar trimws(format(round(x, k), nsmall=k)). Este sistema parece funcionar pero desafortunadamente la salida es de tipo character en lugar de ser de tipo numeric.

Si hago lo mismo en Java funciona correctamente. Ejecuto el siguiente código:

String str = “2811.1019192874087”;
double val = Double.parseDouble(str);
String str2 = String.valueOf(val);
System.out.println(str2);
System.out.println(val);

Esto imprime:

2811.1019192874087
2811.1019192874087

¿Cómo puedo solucionar el problema en R? Muchas gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Se puede utilizar la función formatC para obtener la salida deseada. Esta función te permite especificar el número de decimales que quieres utilizar para formatear la salida. Por ejemplo, si quieres mantener la precisión del número original, puedes utilizar el siguiente código:

    str <- "2811.1019192874087"
    val <- as.numeric(str)
    str2 <- formatC(val, digits=17, format="f")
    print(str2)
    print(val)
    

    Esto imprimirá:

    "2811.1019192874087"
    2811.102
    

Comments are closed.