代码之家  ›  专栏  ›  技术社区  ›  Brian

字符串.格式问题

  •  0
  • Brian  · 技术社区  · 16 年前

    MSDN 提供数字占位符示例:
    1234.5678 ("#####") -> 1235
    我发现这让人困惑(我希望是1234或其他什么),所以我用C编写了这段代码来测试它:

    Console.WriteLine(String.Format("{0:#}", 1234.5678));
    Console.WriteLine(String.Format("{0:#####}", 1234.5678));
    Console.WriteLine(String.Format("{0:#}", "1234.5678"));
    Console.WriteLine(String.Format("{0:#####}", "1234.5678"));
    

    它提供以下输出:

    1235
    1235
    1234.5678
    1234.5678
    

    请解释一下。

    6 回复  |  直到 16 年前
        1
  •  13
  •   Instantsoup    16 年前

    前两个 String.Format 呼叫正在格式化 (十进制)值。格式字符串被设置为仅显示整数部分(小数点之前),因此值是四舍五入的。

    第二个 字符串格式 呼叫正在格式化 一串 值,恰好包含数字的字符串表示形式。结果,你正得到你所提供的一切。数字占位符仅适用于传递给 字符串格式 .

        2
  •  2
  •   Chris Cudmore    16 年前

    尝试:

    Console.WriteLine(String.Format("{0:#####.##}", 1234.5678));
    

    这将给出1234.57

    您需要指定小数点。另外,最后两个是字符串,因此数字格式不适用。

        3
  •  0
  •   Instantsoup    16 年前

    数字四舍五入,因为模式中没有定义小数点。弦不是圆形的,因为它们是弦。

        4
  •  0
  •   James Conigliaro    16 年前

    您要指定的前两种格式没有小数点,因此它将对数字进行相应的舍入。最后两行不是格式化数字,而是格式化字符串,因此数字格式不适用。

        5
  •  0
  •   Dirk Vollmar    16 年前

    如您链接的msdn文章中所述,格式说明符(“”)只适用于数字类型。

    .NET框架类库中的所有数字类型都支持自定义数字格式说明符。其中包括biginteger、byte、decimal、double、int16、int32、int64、sbyte、single、uint16、uint32和uint64类型。

    您在第三行和第四行中传递的是一个字符串,没有数字类型,因此没有应用任何格式标识。

        6
  •  0
  •   slf    16 年前

    前两个是数字,因此应用了格式设置,它们被向上取整,小数被丢弃。第二个是字符串,因此不应用数字格式。