El controlador ODP ADO.NET devuelve decimal con cero adicional en la representación de cadena

StackOverflow https://stackoverflow.com/questions/1807285

Pregunta

El problema de hoy es el siguiente: tenemos una tabla en una base de datos Oracle. La tabla contiene un campo que es del tipo Número (18, 3).

En la superficie, tanto el almacenamiento como la carga de datos de dicho campo funcionan perfectamente. Sin embargo, una inspección más profunda revela que los números que tienen tres dígitos decimales en ellos, por ejemplo. 500.001, se leen de la base de datos de manera que la representación de cadena del decimal tenga un cuarto dígito cero (por ejemplo, 500.0010). Esto parece suceder cuando el tercer dígito decimal es distinto de cero.

Para propósitos matemáticos, esto no es un problema. Sin embargo, tenemos validadores que verifican el número de dígitos decimales en un número decimal convirtiéndolo en una cadena y luego contando el número de dígitos decimales. Dado que este dato en particular se define para tener como máximo tres dígitos decimales, el cero adicional causa un error de validación.

Como no puedo cambiar los validadores, me pregunto si hay una forma limpia de obtener el decimal sin el cero adicional, además de convertir el número en una cadena, recortar los ceros finales y luego volver a analizar ¿eso? ¿O debería estar haciendo algo completamente diferente?

¿Fue útil?

Solución

Prueba esto:

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

Casting to int se deshace de la parte fraccionaria. No necesita todos los paréntesis, pero creo que es más fácil ver qué sucede si se indica explícitamente el orden de las operaciones.

Otros consejos

Me encontré con el mismo problema pero usé: number.ToString("F3")

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