Supongamos que tenemos un número System.Decimal.Calcular System.Decimal Precision and Scale
Por ejemplo, tomemos uno cuya ToString() la representación es la siguiente:
d.ToString() = "123.4500"
El siguiente puede decirse de este decimal. Para nuestros propósitos aquí, la escala se define como la cantidad de dígitos a la derecha del punto decimal. La escala efectiva es similar, pero ignora los ceros finales que ocurren en la parte fraccionaria. (En otras palabras, estos parámetros se definen como decimales SQL además de algunos parámetros adicionales para tener en cuenta el concepto System.Decimal de ceros en la parte fraccionaria.)
- Precisión: 7
- Escala: 4
- EffectivePrecision: 5
- EffectiveScale: 2
Dado un System.Decimal arbitraria, ¿cómo puedo calcular los cuatro de estos parámetros de manera eficiente y sin necesidad de convertir en una cadena y examinar ¿la cuerda? La solución probablemente requiera Decimal.GetBits.
Algunos ejemplos más:
Examples Precision Scale EffectivePrecision EffectiveScale
0 1 (?) 0 1 (?) 0
0.0 2 (?) 1 1 (?) 0
12.45 4 2 4 2
12.4500 6 4 4 2
770 3 0 3 0
Alternativamente interpretar estas precisiones como cero estaría bien (?).
Gracias, esto es muy interesante. No es tan rápido como extraer la información de ToString, como lo muestro en una publicación separada. –
Jon, si piensas que tu (uint []) (objeto) el reparto es malo (estoy de acuerdo), entonces ¿por qué no utilizas una forma un poco más ordenada y explícita? – Joren
Señalaré que este código devuelve precisión y escala usando definiciones de notación científica. Por ejemplo, 0.005 tiene Precisión = 1 y Escala = 3. Esa es la manera ordinaria de hacer las cosas, pero otra interpretación de estos parámetros es por el tipo decimal de SQL. De esta forma, Precisión = 3 y Escala = 3. Ese es el decimal SQL más pequeño que podría usar para mantener 0.005. La pregunta original mencionó brevemente los decimales SQL (pero no dio un ejemplo de este caso, gracias a Jon Seigel, quien recientemente me lo señaló). Mi implementación (FastInfo a continuación) proporciona el último tipo de precisión y escala. ¡Gracias! –