Necesito mantener la cultura al convertir el doble en una cadena y también redondear a un solo decimal.

Convertir doble a cadena con cultura:

((12275454.8).ToString("N", new CultureInfo("sl-SI")));

Da salida:

12.275.454,80

Convertir doble a cadena con solo un decimal:

string.Format("{0:F1}",12275454.8)

Da salida:

12275454.8

La segunda salida no tiene cultura, la primera salida no se redondea a un decimal. ¿Cómo combinar ambos métodos?

c#
0
FrenkyB 7 mar. 2017 a las 21:25

2 respuestas

La mejor respuesta

Simplemente use la cadena de formato de su segundo ejemplo en su primer ejemplo, es decir:

((12275454.8).ToString("N1", new CultureInfo("sl-SI")));

Editar: Se cambió el formato de F1 a N1 según la solicitud. La diferencia entre ambos es que N además usa miles de separadores, mientras que F no. Para obtener más detalles, consulte https://msdn.microsoft. com / es-US / library / dwhawy9k (v = vs.110) .aspx

2
ckuri 7 mar. 2017 a las 18:47

Puede establecer la cultura "sl-SI" como predeterminada :

 using System.Threading;

 ...

 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("sl-SI");

 string test = string.Format("{0:F1}",12275454.8);

Agregue try..finally si desea cultura "sl-SI" solo para un bloque de código:

var savedCulture = Thread.CurrentThread.CurrentCulture;

try {
  Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("sl-SI");

  // Let's work with "sl-SI" for a while  
  string test = string.Format("{0:F1}",12275454.8);
  ...
}
finally {
  Thread.CurrentThread.CurrentCulture = savedCulture;
}
1
Dmitry Bychenko 7 mar. 2017 a las 18:40