2009-04-20 15 views
6

Wygląda na to, że String.Format nie sformatuje łańcucha jako danych wejściowych. Czy robię coś złego, czy jest to tylko rodzime zachowanie?String.Format nie formatuje ciągu znaków

Dane wejściowe: 0,37

To nie działa.

string x = String.Format("{0:P}", myString) 

wyjściowa: 0,37

to robi.

string x = String.Format("{0:P}", Convert.ToDecimal(myString)) 

wyjściowa: 37,00%

Odpowiedz

9

Wierzę, że to jest normalne zachowanie dla 'formatowania kompozytowego'.

Twój pierwszy przykład to próba zastosowania liczbowych reguł formatowania do łańcucha znaków. Twój drugi przykład to próba zastosowania liczbowych reguł formatowania do liczby, która może mieć pozycje dziesiętne.

Aby uzyskać więcej informacji, patrz this article on MSDN.

2

Opcja formatowania, którą próbujesz zastosować, działa tylko dla liczb. Nie ma koncepcji inteligentnych ciągów w .NET, w której CLR sprawdza ciąg znaków dla typu.

2

Czy robię coś nie tak, czy jest to tylko rodzime zachowanie?

To rodzime zachowanie. Zasadniczo nie jest to zadanie polegające na interpretowaniu wejścia ciągów znaków. Format zakłada, że ​​użytkownik dostarcza odpowiednie dane - w twoim przypadku dane numeryczne. Łańcuch nie jest numeryczny, nawet jeśli reprezentuje numer (jest to najważniejsze rozróżnienie w CS między wartością/semantyką a jej reprezentacją/składnią!).