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

时间:2017-05-05 10:12:04

标签: c# .net string string.format

我有一行代码,例如:

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

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

有关。恩。 225,

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

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

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

4 个答案:

答案 0 :(得分:4)

只需你可以这样做

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());

答案 1 :(得分:2)

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

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

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

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

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

有关详细信息,请参阅:

Standard Numeric Format Strings

Custom Numeric Format Strings

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

如果你想消除十进制separtor(“逃避点”,就像你说的那样),尝试用替换替换小数点分隔符串

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