miałem ten sam problem. Chciałem sformatować liczby, takie jak format "Ogólne" w arkuszach kalkulacyjnych, co oznacza, że ułamki dziesiętne są znaczące, ale je odetnij, jeśli nie, Innymi słowy:
1234,56 => 1,234.56
1234 => 1.234
To musi obsługiwać maksymalną liczbę miejsc po przecinku, ale nie umieścić końcowe zera lub kropki, jeśli nie jest to wymagane, i oczywiście, musi być przyjazny dla kultury. Naprawdę nigdy nie udało mi się znaleźć sposobu, aby to zrobić samodzielnie, ale kombinacja String.Format i Regex.Replace z pewną pomocą kulturową z NumberFormatInfo.CurrentInfo wykonała zadanie (LinqPad C# Program).
string FormatNumber<T>(T number, int maxDecimals = 4) {
return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number),
@"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", "");
}
void Main(){
foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 })
Console.WriteLine(test + " = " + FormatNumber(test));
}
Produkuje:
123 = 123
1234 = 1,234
1234.56 = 1,234.56
123456.789 = 123,456.789
1234.56789123 = 1,234.5679
Kiedy mówisz "nie działa", co jest string.Format rzeczywiście robi? – tomasmcguinness
Nie wypróbowałem metody string.Format, a ja używałem formatowania tostringowego jest łatwe – Krishan
Naprawdę nie rozumiem twoich przykładów, jaki to rodzaj formatowania? (Czy to tylko ja) – V4Vendetta