2010-11-02 30 views

Respuesta

71

Para una decimal, utilice el método ToString, y especifique la cultura invariante para obtener un período como separador decimal:

value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture) 

El tipo long es un número entero, por lo que no hay parte fracción. Puede formatearlo en una cadena y agregar algunos ceros después:

value.ToString() + ".00" 
+0

¿Qué hay de mil separadores? ¿Qué lo controla? –

+0

Por favor dígame cómo "0,0000" es analizado por .NET –

+1

@Captain Comic: Usted obtiene separador de miles cuando, por ejemplo, utiliza el formato "N2", pero no con el formato personalizado "0.00". El formato personalizado "0.00" significa "uno o más dígitos antes del separador decimal, el separador decimal dependiente del cultivo, y exactamente dos dígitos después del separador decimal". Al especificar la cultura invariable, se usa un separador decimal, que es un punto. – Guffa

-2

Usted puede simplemente utilizar Decimal.ToString()

Durante dos decimales

myDecimal.ToString("0.00"); 

Durante cuatro decimales

myDecimal.ToString("0.0000"); 

Esto da puntos como separador decimal, y no separador de miles, independientemente de la cultura.

+12

No, da el separador decimal especificado por la cultura, no siempre el punto. – Guffa

+4

El '.' en su cadena de formato es un marcador de posición para el separador decimal y no un literal' .'. Entonces, si, por ejemplo, su cultura es 'fr-FR', entonces el número se mostrará como 1,23 o 1,2345, etc. – LukeH

+0

Traté de cambiar el carácter decimal en Configuración regional en Windows a coma, y ​​aún así imprimo el punto y no coma ¿Alguna razón por la que no cambia entonces, si es solo un marcador de posición? –

21

Es muy fácil especificar su propio separador decimal. Me tomó alrededor de 2 horas averiguarlo: D. ¿Ve que estaba usando la cultura actual u otra que especifique, correcto? Bueno, lo único que el analizador necesita es un Proveedor IFormat. Si le da el CultureInfo.CurrentCulture.NumberFormat como formateador, formateará el doble de acuerdo con el NumberDecimalSeparator de su cultura actual. Lo que hice fue crear una nueva instancia de la clase NumberFormatInfo y establecer su propiedad NumberDecimalSeparator en cualquier secuencia de separación que quisiera. Complete el código a continuación:

double value = 2.3d; 
NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberDecimalSeparator = "-"; 
string x = value.ToString(nfi); 

El resultado? "2-3"

1

Prefiero usar ToString() y IFormatProvider.

double value = 100000.3 
Console.WriteLine(value.ToString("0,0.00", new CultureInfo("en-US", false))); 

de salida: 10,000.30

+1

Esto causará problemas. Si reemplaza su símbolo decimal por una coma, obtendrá un resultado de ** 100,000,30 **. Esto se debe a que el constructor de CultureInfo que está utilizando respetará la configuración del usuario, como el símbolo decimal. Una forma más segura es usar CultureInfo.Invariant, o puede construirlo así: 'new CultureInfo (" en-US ", falso)' Al pasar falso al constructor, le dice que no respete las personalizaciones del usuario . – Carl

1
double valor=3,14159 
string v = valor.Replace(",","."); 
Console.WriteLine(v); 

de salida: 3.14159

+4

Sí, funciona, no, no es lo que quieres usar. ¿Qué pasa si tienes 1000 pies? valor.Replace (",", "."). Reemplazar (".", ",")? Naah. Si usa CultureInfo, siempre funciona y mantiene el código legible. – increddibelly

-2

Aquí se presenta una descripción detallada del formato numérico Cuerdas
https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

creo que se podría haber utilizado:
value.ToString (+ NumberOfDecimals "F")

value = 10,502 
value.ToString("F2") //10,50 
value = 10,5 
value.ToString("F2") //10,50 
+2

El punto de la pregunta es que el autor necesita punto. no coma, como separador decimal. – Filip

Cuestiones relacionadas