определить количество знаков после запятой на основе строки формата - PullRequest
1 голос
/ 15 ноября 2011

У меня есть требование определить количество знаков после запятой на основе строки формата, например #.00 должно возвращать 2.

###,#.  === > 0 
###,#.00000 ===> 4

Есть ли лучший способ, чем просто циклически проходить по символам ипроверяя, больше ли их индекс, чем точка, и увеличивая количество ...

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

Если вы можете предположить, что входные данные будут иметь только нули после десятичного числа, вы можете вычесть длину строки из IndexOf (".").

(str.Length - str.IndexOf('.') - 1)

В противном случае вам придется считатьнули после десятичной дроби.Я бы лично использовал утверждение LINQ.Это не будет более производительным, но это будет выглядеть лучше.

str.SkipWhile(c => c != '.').Count(c => c == '0')

Конечно, есть и другие предостережения.Чтобы придумать «правильный» ответ, вам нужно будет предоставить больше информации о том, как вы хотите обрабатывать такие случаи:

(12345.4321).ToString("#.##") // 12345.43
(12345.4321).ToString("#.#####") // 12345.4321
(12345.4321).ToString("#.#####-0") // 12345.43210-0

Так что вам нужно считать хэши, потому что они могут привести к появлению лишних десятичных знаков или не считать их, потому что они не могут?

0 голосов
/ 15 ноября 2011

Вы можете использовать LastIndexOf, передав . и использовать результат с длиной строки.

return fmtString.Length - fmtString.LastIndexOf('.') - 1;

Вы должны убедиться, что строка содержит ., иначе LastIndexOf вернет -1.

0 голосов
/ 15 ноября 2011

Ну, вы можете использовать формат для форматирования числа 0, подсчета количества символов и вычитания 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...