views:

219

answers:

2

Is it true that String.Format works 2 ways: if we use built-in format such as C, N, P.... it will take locale settings into account? if we use custom format code such as #,##0.000 it will NOT take locale settings into account?

In my code, I use method like this

String.Format("{0:#.##0,000}", value);

because my country use comma as decimal separator

but the result still is: 1,234.500 as if it consider dot as decimal separator.

Please help!

+5  A: 

You want to use CultureInfo:

value.ToString("N", new CultureInfo("vn-VN"));

Using String.Format:

String.Format(new CultureInfo("vn-VN"), "N", value);

Since you're in Hanoi (from profile), I used Vietnam's code, which is vn-VN.

Eric
A: 

This works.

IFormatProvider iFormatProvider = new System.Globalization.CultureInfo("es-ES");

string s = value.ToString("#,##0.000", iFormatProvider);

string s2 = string.Format(iFormatProvider, "{0:#,##0.000}", val)

Note that the , and . are using a 'standard' en-US style, but .ToString() and string.Format() with a format provider does the right thing.

Robert Paulson