I want to convert a numeric value to a string, displaying culture-specific digits. For example, the Dari language used in Afghanistan (culture name “prs-AF”) uses Eastern-Arabic numerals instead of the Arabic numerals used in most Western cultures (0,1,2,3,4,5,6,7,8,9).
When examining the CultureInfo class built into the Framework, it lists the correct native digits (screenshot taken from output in LinqPad):

CultureInfo.CreateSpecificCulture("prs-AF").NumberFormat.NativeDigits
However, when trying to convert a number to a string to display in that culture, I am not getting the native digits:

var number = 123.5;
var culture = CultureInfo.CreateSpecificCulture("prs-AF");
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
var text = number.ToString(culture);
Console.WriteLine(text);
Can anyone tell me how to display the native digits?
Digit substitution is something that takes place when you display text that contain digits.
It is not supposed to change the string representation of a number, as you’ve seen.
The number
123.5is formatted as the string123.5no matter digit substitution. It is, however, displayed with the appropriate glyphs ifThread.CurrentThread.CurrentCultureis set accordingly and if the presentation engine supports digit substitution. (WPF do support it)