none
double en c# RRS feed

  • Pregunta

  • Buenas tardes

    tengo dos campos tipo string en la BD

    longitud: 40.4689756

    latitud: -3.659874

    Ahora necesito pasar eso a double pero que tenga el mismo formato 

    es posible eso?

    saludos


    ruben

    miércoles, 15 de noviembre de 2017 16:12

Respuestas

  • El standard te ganantiza el round-trip de los 15 primeros digitos significativos 

    "12.345678" -> 12.345678 -> "12.345678"

    El standard llama a esto, precisión.


    miércoles, 15 de noviembre de 2017 17:25
  • No es necesario. El ieee 754 te garantiza que su tipo double,  puede almacenar y recuperar sin pérdida alguna un valor de 8 dígitos significativos, como el que muestras. Su espacio de almacenamiento de 52 bits lo hace posible.
    miércoles, 15 de noviembre de 2017 17:46

Todas las respuestas

  • hola

    a que te refieres con formato ? a que conserve el punto, porque eso no depende del tipo double sino de la cultura aplicada, no sera lo mismo usar en-EN que es-ES

    el tipo de dato no tiene formato, este solo aplica cuando visualizas el dato (o lo tienes en un string)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 15 de noviembre de 2017 16:17
  • Hola Leandro

    Lo tengo en un string esos valores

    longitud: 40.4689756

    latitud: -3.659874

    Asi lo tengo 

    pero tengo que convertir a double Y ademas al convertir quiero que sea igual al string con el punto

    Saludos


    ruben

    miércoles, 15 de noviembre de 2017 16:23
  • Al convertir el string el me lo redondea


    ruben

    miércoles, 15 de noviembre de 2017 16:29
  • double longitud = Convert.ToDouble(txtlongitud.Text, System.Globalization.CultureInfo.InvariantCulture);

    El parser ignora el punto ya que para tu locale se trata de un separador de miles.

    El segundo argumento de ToDouble, es un proveedor de formato. InvariantCulture provee el punto como separador decimal, para consumo del parser. 


    • Editado walter_5 miércoles, 15 de noviembre de 2017 16:54
    miércoles, 15 de noviembre de 2017 16:54
  • tengo que convertir a double Y ademas al convertir quiero que sea igual al string con el punto

    No. imposible. Los "double" solo guardan en memoria el valor binario, no guardan formato. El formato lo pone el codigo que usas para visualizar el double, cuando lo haces visible para los humanos. Ese codigo es el que tiene que aplicar el formato; el double no tiene ningun "sitio" para salvar el formato.

    Si necesitas conservarlo con exactamente el mismo formato, conservalo como string, no lo conviertas en double.

    Por cierto, ten presente que los double son "imprecisos": al convertir a base 2 el valor numerico para almacenarlo en la memoria del double, puede ocurrir que el valor en base dos tenga infinitos decimales, aunque en base 10 sean finitos. Como no caben infinitos unos y ceros en el almacenamiento, se truncan los que no caben. El resultado es que si vuelves a convertir ese dato a base 10, puede que no salga exactamente el mismo valor, sino que exista una minuscula discrepancia al final de todos los decimales. Por ejemplo, puede ocurrir que 40.4689756 se almacene como 40.4689756000002 o como 40.4689755999998.

    Asi que ahi tienes una segunda buena razon para no convertir a double (ademas de que no se guarda el formato) si es que requieres conservar el mismo valor absolutamente identico.

    miércoles, 15 de noviembre de 2017 17:11
    Moderador
  • El standard te ganantiza el round-trip de los 15 primeros digitos significativos 

    "12.345678" -> 12.345678 -> "12.345678"

    El standard llama a esto, precisión.


    miércoles, 15 de noviembre de 2017 17:25
  • cuando obtengas el valor de tu campo desde la bd en tu codigo lo puedes almacenar en una variable tipo string y luego convertirlo:

    string val = "-125,12365";
    double valor = Convert.ToDouble(val, System.Globalization.CultureInfo.InvariantCulture);

    y la variable valor tendra el valor -125,12365 como tipo double

    Espero te aya servido mi respuesta,

    saludos


    Heytel Martinez


    • Editado HRMA miércoles, 15 de noviembre de 2017 17:30
    • Propuesto como respuesta HRMA miércoles, 15 de noviembre de 2017 17:31
    miércoles, 15 de noviembre de 2017 17:29
  • No es necesario. El ieee 754 te garantiza que su tipo double,  puede almacenar y recuperar sin pérdida alguna un valor de 8 dígitos significativos, como el que muestras. Su espacio de almacenamiento de 52 bits lo hace posible.
    miércoles, 15 de noviembre de 2017 17:46