【问题标题】:identify the number of decimal places based on the format string根据格式字符串识别小数位数
【发布时间】:2011-11-14 20:11:59
【问题描述】:

我需要根据 #.00 这样的格式字符串来识别小数位数,应该返回 2

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

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

【问题讨论】:

    标签: c# c#-4.0


    【解决方案1】:

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

    那么您是否需要计算哈希值,因为它们可能会导致出现额外的小数位,或者不计算它们,因为它们可能不会?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以使用LastIndexOf,传入.并将结果与​​字符串的长度一起使用。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-11
          • 2013-09-16
          • 1970-01-01
          相关资源
          最近更新 更多