NumberFormatInfo 可以使用有效数字吗?

Can NumberFormatInfo use significant digits?

我正在使用 System.Globalization.NumberFormatInfo 在我的 C#.NET WinRT 应用程序中格式化我的数字,一切正常,只有一个例外。

也就是说,我需要一种方法让格式化程序遵守我正在格式化的数字的有效数字

在Objective C中,我使用NSNumberFormatter.UsesSignificantDigits,这里描述: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/index.html#//apple_ref/occ/instp/NSNumberFormatter/usesSignificantDigits

但是,NumberFormatInfo 似乎没有与此功能对应的任何内容。 NumberDecimalDigits 属性 似乎采用单个数字,应用时不考虑格式化的数字(这是我一直想要的,我 而不是 在尊重有效数字的同时尝试格式化) https://msdn.microsoft.com/en-us/library/windows/apps/system.globalization.numberformatinfo(v=vs.105).aspx

我可以使用 NumberFormatInfo 来解决这个问题,还是我必须使用 NumberFormatInfo 以外的东西来格式化我的数字?如果我需要做其他事情,最好的方法是什么?

例如,我希望按以下方式格式化以下数字:

而不是下面的

我一开始只是使用 .ToString(),但我想确保我的小数点分隔符、分组分隔符等都被正确使用,所以我最终以这种方式实现了它,我对结果很满意。

value 是我正在尝试格式化的 double

CultureInfo culture = this.CurrentCulture;
string decimalSeparator = culture.NumberFormat.NumberDecimalSeparator;
string temp = value.ToString();
string[] splitter = temp.Split(decimalSeparator[0]);
int numDigitsToDisplay = 0;
if( splitter.Length > 1)
{
    numDigitsToDisplay = splitter[1].Length;
}
numDigitsToDisplay = Math.Min(10, numDigitsToDisplay); // Make sure no more than 10 digits are displayed after the decimal point
NumberFormatInfo tempNFI = (NumberFormatInfo)culture.NumberFormat.Clone();
tempNFI.NumberDecimalDigits = numDigitsToDisplay;
double roundedValue = Math.Round((double)value, numDigitsToDisplay, MidpointRounding.AwayFromZero); // just in case the number's after-decimal digits exceed the maximum I ever want to display (10)
return roundedValue.ToString("N", tempNFI);