根据格式字符串标识小数位数

时间:2011-11-14 20:12:00

标签: c# c#-4.0

我要求根据格式字符串标识小数位数,例如#.00应返回2

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

有没有更好的方法,只需循环遍历字符并检查它们的索引是否大于点并递增计数...

3 个答案:

答案 0 :(得分:2)

如果您可以假设输入在小数点后只有零,则可以从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

那么你需要计算哈希值,因为它们可以导致出现额外的小数位,或者不计算它们,因为它们可能没有?

答案 1 :(得分:0)

好吧,您可以使用格式来格式化数字0,计算字符数并减去2。

答案 2 :(得分:0)

您可以使用LastIndexOf,传递.并使用带有字符串长度的结果。

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

您应确保该字符串包含.,否则LastIndexOf将返回-1。