我有一行代码,例如:
mbar.HealthLabel.text = String.Format("{0:0.0}", _hp);
输出为:2.25例如。是否可以使用String.Format函数从输出字符串视图中转义一个点?
有关。恩。 225,
为了使我的问题更清楚,我需要同样的效果,如:
Math.Floor(_hp * 100).ToString();
但需要通过String.Format
模板来完成..谢谢。
答案 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));
有关详细信息,请参阅:
答案 2 :(得分:1)
直到Microsoft.NET Framework 4.7,当我们只允许修改格式字符串(" template")时,无法解决这个问题。所有解决方案都需要:
答案 3 :(得分:0)
如果你想消除十进制separtor(“逃避点”,就像你说的那样),尝试用替换替换小数点分隔符串:
string result = String
.Format("{0:0.0}", _hp)
.Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, "");