terça-feira, 26 de outubro de 2010

Azure Development Storage não reconhece ponto decimal em valores double

Gravei em uma tabela do Development Storage do Azure uma entidade que tem uma propriedade do tipo double. O valor dessa propriedade era 123,45. Quando recarreguei a entidade do Dev Storage, ao ler o valor da propriedade, obtive 12.345. Aparentemente o Dev Storage estava “ignorando” o ponto decimal que eu tinha colocado ao armazenar o valor. Mas como a gente já tinha visto este comportamento em outras situações, e sempre era relativo ao “Regional Settings” sendo usado, tentei por aí.

DISCLAIMER: Não tente isto em casa. Manipular diretamente o BD do Development Storage é altamente “des-recomendado”.

Bem, abri o BD do Development Storage no SQL Management Studio, e achei uma tabela chamada “TableRow”, que contém as entidades que gravamos no dito cujo. Na coluna Data, estão gravadas as propriedades da entidade, formatadas como um documento XML. E o valor gravado lá era “123.45” – ou seja, o Dev Storage armazenou corretamente o valor; o problema aparentemente era na leitura. Pra confirmar isso, mudei o valor “na mão” (leia DISCLAIMER acima) para “123,45” e a aplicação retornou o valor que eu esperava.

Não consegui um jeito de mudar a cultura usada pelo Development Storage, para ver se com isto ele lia os valores de forma correta; mas um workaround simples é mudar, no Painel de Controle, na parte de configurações regionais, o separador decimal de “vírgula” para “ponto”. Aí você reinicia o Dev Storage e ele passa a ler corretamente os valores double. (No Windows 7 as configurações regionais para o separador decimal ficam em Painel de Controle > Relógio, Idioma e Região > Alterar o formato de data, hora ou número > Configurações adicionais).

Coloquei um bug no Connect sobre isto (o link está aqui mas parece que as entradas do Connect agora só são acessíveis se você se inscrever no programa do respectivo produto). Vamos ver o que o pessoal da MS responde.