Pergunta

O problema de hoje é a seguinte: temos uma tabela em um banco de dados Oracle. A tabela contém um campo que é do tipo de número (18, 3).

Na superfície, ambos salvar e carregar dados de trabalho de campo disse perfeitamente. Contudo, uma inspecção mais aprofundada revela, que os números que têm três dígitos decimais neles, por exemplo 500,001, são lidos a partir da base de dados de maneira tal que o representação da cadeia do decimal tem um quarto, de zero dígitos (por exemplo, 500,0010). Isto parece acontecer sempre que o terceiro dígito decimal é diferente de zero.

Para fins de matemática, este não é um problema. No entanto, temos validadores que verificam o número de dígitos decimais em um número decimal, convertendo-a uma corda e, em seguida, contar o número de dígitos decimais. Desde esta parte particular de dados é definido para ter no máximo três dígitos decimais, o zero adicional causa um erro de validação.

Uma vez que eu não posso mudar os validadores, estou me perguntando se existe uma maneira limpa para obter o decimal, sem o extra de zero, além de converter o número para uma cadeia, aparar os zeros à direita e, em seguida, re-análise isto? Ou eu deveria estar fazendo algo completamente diferente?

Foi útil?

Solução

Tente isto:

decimal trimmed = ((decimal)((int)(number * 1000))) / 1000

A projeção para int se livrar da parte fracionária. Você não precisa de todos os parênteses, mas eu acho que é mais fácil ver o que está acontecendo, se a ordem das operações é explictily indicado.

Outras dicas

Eu corri para o mesmo problema, mas eu usei: number.ToString("F3")

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top