Pregunta

Tengo un valor que se almacena correctamente en una propiedad de un objeto, pero al guardar los cambios en la base de datos de almacenamiento de Azure, el doble valor se almacena en la base de datos ignorando el punto (7.11000000003 se guarda como 711). Además, la propiedad se cambió a 711,0.

¿Cómo puedo solucionar este problema?

El campo ya se duplicará en la clase y la tabla de base de datos.

¿Fue útil?

Solución

Este problema parece deberse a la configuración de la cultura del almacenamiento Dev está utilizando. Si se echa un vistazo a la mesa TableRow dentro de la db Dev almacenamiento, los datos se almacenan como XML, y los valores decimales utilice el punto como separador decimal. Aquí en Brasil el punto es el separador de miles. I editado los datos directamente en el db Dev de almacenamiento, cambiando el punto para una coma (PT-BR separador decimal), y el valor fue leído bien. Eso es raro, ya que si el valor es aceptable lectura cuando se utiliza el separador decimal PT-BR, parece Dev almacenamiento está usando mi configuración de la cultura actual. Pero ¿por qué la cultura no se aplica en el ahorro de los datos?

PS: El cambio de las ventanas de localización para EN-US resolvió el problema. Creo que es por eso que este es el único puesto que pude encontrar sobre él.

Otros consejos

Es el valor doble en su propio campo, o se trata en el PartitionKey o campo rowKey? PartitionKey y rowKey son siempre cadenas.

Me acaba de crear una prueba simple que escribe y lee una fila con un doble campo, y los valores se conserva muy bien. He modificado la clase smsmessage muestra de código SMS de Bill Lodin a través de la formación de msdev.com (Tomé el campo Retraso int y lo cambió a un flotador, y le cambió el nombre a MiDouble de aclaración):

public class SmsMessage: TableServiceEntity
{
    public double MyDouble { get; set; }
    public SmsMessage(string destination, string message, double myDouble)
    {
        PartitionKey = destination;
        RowKey = message;
        MyDouble = myDouble;
    }
    public SmsMessage()
        : base("", string.Format("{0:d10}", DateTime.Now.Ticks))
    {
    }
}

a continuación, escribir a la SmsMessageTable:

smsTable.AddObject("SmsMessages", new SmsMessage(destination, message, myDouble));
smsTable.SaveChanges();

Veo esto en el explorador de almacenamiento de tablas, y mis dobles son la forma en que entró en ellos (por ejemplo 1.2345).

a continuación, recuperar con una simple consulta LINQ, un nombre de usuario dado en la clave de partición:

var results = from m in smsTable.SmsMessages
                      where m.PartitionKey.Equals(txtDestination.Text.Trim())
                      select m;

Mis valores dobles están conservados y fuertemente tipado como dobles.

¿Cómo estás comprobando el valor? almacenamiento de desarrollo local utiliza SQL Express bajo el capó, por lo que podría estar abriendo SQL y hurgando allí. Yo evitaría que y en lugar de leer el valor utilizando la biblioteca cliente .NET de almacenamiento. Sospecho que el valor va a volver correctamente.

(Tal vez en la tienda local de SQL con respaldo, el valor se almacena en notación científica?)

Aunque aprecio el esfuerzo y probablemente no me expongo el caso lo suficientemente bien, nada de esto responde a mi pregunta. Esta respuesta es simplemente no atribuir la generosidad injustamente. La recompensa no debe ser atribuido automáticamente a la mejor respuesta con> = 2 upvotes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top