2011-05-20 21 views
11

Tengo una tabla con campo de dinero en mi base de datos. He creado una entidad y he creado una propiedad decimal para ese campo monetario. Cuando el valor de ese campo se muestra en la vista Mi MVC3, tiene cuatro ceros 0000 después de un decimal como este: 5489.0000. Quiero mostrar solo dos 00 o decimales. Cómo puedo arreglarlo. Por qué muestra cuatro lugares decimales, incluso he declarado la propiedad como decimal.dos decimales para campo decimal/dinero

Sugerido.

Respuesta

16

El tipo de datos SQL Server money internamente es un entero de 64 bits con una escala implícita de 4 posiciones decimales. Para citar Books Online, es exacto "a diez milésimas de una unidad monetaria". Es, el equivalente aproximado de decimal(19,4).

El motivo de la escala de 4 en lugar de 2 es mantener la precisión en los resultados de la aritmética. Su valor de moneda ordinaria tiene una escala de 2 (por ejemplo, $ 3,27) La multiplicación o división de dos números con una escala de 2 decimales da un resultado que es preciso para 4 decimales: 9.23 dividido por 3.27 produce un resultado de 2.82262996941896 (aproximadamente). Puede llevar el resultado a cualquier precisión (número de decimales) que desee. Sin embargo, el resultado es solo preciso a 4 decimales (2.8226) ya que los valores originales solo tenían una precisión de 2 decimales. Esa medida es precisa hasta dentro de 1/2 de la unidad más pequeña especificada (+/- 0.005).

Pero estoy divagando.

Como resultado de un valor de SQL Server money con una escala implícita de 4, ADO.Net convierte el valor a System.Decimal con una escala de 4. Y dado que System.Decimal rastrea la escala, cuando la convierte a cadena, obtienes 4 decimales.

Para obtener menos, puede

  • redonda que antes de la conversión, utilizando la apropiada sobrecarga Decimal.Round() o
  • formato como desee (por ejemplo. (3.27M).ToString("0.00") ;.

Espero que esto ayude.

Este programa:

namespace Sandbox 
{ 
    using System ; 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     decimal pi  = (decimal) Math.PI ; 
     string piText = pi.ToString("0.00"); 
     Console.WriteLine("PI to 2 decimal places is {0} one way, and {1:0.00} another" , piText , pi) ; 
     return; 
    } 
    } 
} 

produce lo que se espera:

PI to 2 decimal places is 3.14 one way, and 3.14 another 

Cheers,

N.

+1

¿Estoy usando decimal? y ToString ("0:00) no se puede usar con él – DotnetSparrow

+0

Alguien debería decirle eso al tiempo de ejecución de .Net. Vea el ejemplo en mi respuesta original. –

+0

Los dores de formateo no funcionan en los componentes de DevExpress. Que están llenos de errores como este BTW. – f470071

6

tiene que formatear la cadena.

Una cosa que puede hacer si el dinero que desea mostrar es:

static void Main() 
{ 
    decimal x = 0.999m; 
    decimal y = 9999999999999999999999999999m; 
    Console.WriteLine("My amount = {0:C}", x); 
    Console.WriteLine("Your amount = {0:C}", y); 
} 

}

SALIDA: salida

Mi cantidad = $ 1.00
Su cantidad = $ 9,999,999,999,999,999,999,999,999,999.00

la {0: C} es la moneda Formato

Espero que esto ayude!

+0

Hola @Nico: No quiero poner $ con la cantidad. ¿Cómo puedo modificar string.format ("{0: C}", cantidad)? – DotnetSparrow

+0

el podría decir decimal dec = 5489.0000M; dec.ToString ("0.00"); – NicoTek

0

He utilizado este y funcionó:

YourDecField.ToString("N") 
Cuestiones relacionadas