【发布时间】:2011-11-14 20:11:59
【问题描述】:
我需要根据 #.00 这样的格式字符串来识别小数位数,应该返回 2。
###,#. === > 0
###,#.00000 ===> 4
有没有比循环遍历字符并检查它们的索引是否大于点并增加计数更好的方法...
【问题讨论】:
我需要根据 #.00 这样的格式字符串来识别小数位数,应该返回 2。
###,#. === > 0
###,#.00000 ===> 4
有没有比循环遍历字符并检查它们的索引是否大于点并增加计数更好的方法...
【问题讨论】:
如果您可以假设输入在小数点后只有零,您可以从 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,计算字符数并减去 2。
【讨论】:
您可以使用LastIndexOf,传入.并将结果与字符串的长度一起使用。
return fmtString.Length - fmtString.LastIndexOf('.') - 1;
您应该确保字符串确实包含.,否则LastIndexOf 将返回-1。
【讨论】: