Я не знаком с XNA, но в проекте Silverlight, где мне пришлось делать то же самое, я закончил конструированием чисел научных записей из символов верхнего индекса.
Вам не нужен специальный шрифт, просто шрифт Unicode, в котором используются верхние индексы, используемые ниже.
Вот код для сопоставления цифр 0-9 с соответствующим символом:
private static string GetSuperscript(int digit)
{
switch (digit)
{
case 0:
return "\x2070";
case 1:
return "\x00B9";
case 2:
return "\x00B2";
case 3:
return "\x00B3";
case 4:
return "\x2074";
case 5:
return "\x2075";
case 6:
return "\x2076";
case 7:
return "\x2077";
case 8:
return "\x2078";
case 9:
return "\x2079";
default:
return string.Empty;
}
}
И это преобразует ваш оригинальный двойник в научную нотацию
public static string FormatAsPowerOfTen(double? value, int decimals)
{
if(!value.HasValue)
{
return string.Empty;
}
var exp = (int)Math.Log10(value.Value);
var fmt = string.Format("{{0:F{0}}}x10{{1}}", decimals);
return string.Format(fmt, value / Math.Pow(10, exp), FormatExponentWithSuperscript(exp));
}
private static string FormatExponentWithSuperscript(int exp)
{
var sb = new StringBuilder();
bool isNegative = false;
if(exp < 0)
{
isNegative = true;
exp = -exp;
}
while (exp != 0)
{
sb.Insert(0, GetSuperscript(exp%10));
exp = exp/10;
}
if(isNegative)
{
sb.Insert(0, "-");
}
return sb.ToString();
}
Так что теперь вы сможете использовать FormatAsPowerOfTen(123400, 2)
, в результате чего 1.23x10⁵
.