将浮点值格式化为特定格式-Java与C#数字格式

时间:2019-05-15 07:14:05

标签: java c# formatting number-formatting

我需要将Byte转换为KB。因此,将值除以1024 我需要以Java数字格式###,###,###,##0.00 KB

中最初指定的这种格式显示值

此代码

 string format="###,###,###,##0.00 KB";
 return String.Format(format, x);

产生以下输出 ###,###,###,## 0.00 KB

此格式化字符串是在Java对应版本中指定的,是否可以在C#中使用相同的方法? 请指教。

1 个答案:

答案 0 :(得分:2)

String.FormatIFormattable.ToString(此处需要的格式)是不同但相关的东西。

String.Format需要一些带有占位符的格式字符串,如果替换值实现了IFormattable接口,则它们也可以具有格式。

Console.WriteLine(String.Format("{0} KB", 42.ToString("###,###,###,##0.00")));

可以内联42的格式:

Console.WriteLine(String.Format("{0:###,###,###,##0.00} KB", 42));

可以通过插值进一步简化:

Console.WriteLine($"{42:###,###,###,##0.00} KB"));

当然,42可以是插值($"{numValue:###,###,###,##0.00} KB}")中的变量。但是,格式字符串不能为变量,因此将不起作用:

string format = "{x} KB";
Console.WriteLine($format); // does not compile, use String.Format in this case

备注:

Console.WriteLine还支持格式化,因此上面的示例可以这样写:

Console.WriteLine("{0:###,###,###,##0.00} KB", 42);

为了避免混淆,我使用了明确的String.Format


更新

如果尺寸格式来自外部来源,则无法将其内联到格式字符串中,但这不是问题。所以如果你有

string fileSizeFormat = "###,###,###,##0.00 KB";

您仍然可以使用myFloatWithFileSize.ToString(fileSizeFormat)。在这种情况下,String.Format仅在您希望将其嵌入一个漂亮的句子或其他内容时才需要:

return String.Format("The size of the file: {0}", fileSize.ToString(fileSizeFormat));

或带有插值:

return $"The size of the file: {fileSize.ToString(fileSizeFormat)}";