C# 字符串格式:转义一个点

C# String format: escape a dot

我有一行代码,类似于:

mbar.HealthLabel.text = String.Format("{0:0.0}", _hp);

输出为:例如2.25。是否可以使用 String.Format 函数从输出字符串视图中转义一个点?

为了。前任。 225,

为了让我的问题更清楚,我需要同样的效果:

Math.Floor(_hp * 100).ToString();

但需要通过 String.Format 模板来完成。谢谢。

简单的你可以这样做

double value = 1.25;

var stringValue = string.Format("{0:0}", value * 100, CultureInfo.InvariantCulture); //125

编辑: 更通用的解决方案是 Replace 注释中所述的带空字符串的点。

double value = 1.25;

var stringValue = value.ToString(CultureInfo.InvariantCulture).Replace(".",string.Empty);

EDIT2: 还有 another general idea 不使用 Replace 函数(但它也不使用 String.Format

var stringValue = string.Join("", value.ToString().Where(char.IsDigit));

还有一个类似的想法:

var stringValue = new string(value.ToString().Where(char.IsDigit).ToArray());

如果您想消除小数点分隔符("escape the dot",如您所说),请尝试替换小数分隔符 空字符串 :

string result = String
 .Format("{0:0.0}", _hp)
 .Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, "");

首先,请阅读我对问题的评论。正如我在那里提到的,数值的字符串格式取决于区域设置。所以,下面的行

mbar.HealthLabel.text = String.Format("{0:0.0}", _hp);

将return:2,25(关于波兰数字标准)

在我看来你需要这样的东西:

mbar.HealthLabel.text = String.Format("{0:D}", Math.Floor(_hp*100));

详情请见:

Standard Numeric Format Strings

Custom Numeric Format Strings

在 Microsoft.NET Framework 4.7 之前,当我们只允许修改格式字符串 ("template") 时,无法解决此问题。所有解决方案都需要:

  • Post-处理结果字符串。在这里,最接近两位小数的特殊情况可能是 % 格式
  • 首先计算数字参数使其成为整数
  • 编写并应用自定义 IFormatProvider 实现