我有一个数值字符串,类似这样的格式:2223,00
。我想将其转化为 2223
,也就是去掉 "," 后面的信息。假设只会有两位小数在 "," 之后。
我的尝试:
str = str.Remove(str.Length - 3, 3);
有没有更优雅的解决方案?也许使用另一个函数? -我不喜欢放置明确的数字-
您实际上可以使用只带一个参数的“Remove”重载函数:
str = str.Remove(str.Length - 3);
不过,如果你想避免硬编码长度,可以使用以下代码:
str = str.Remove(str.IndexOf(','));
也许是这样:
str = str.Split(",").First();
Split
传递第二个参数 2
,因为您不关心任何进一步的逗号。 - Richardstr = str.Substring(0, str.IndexOf(','));
当然,这是假设你的字符串确实有逗号和小数点。如果没有,上面的代码将失败。你需要进行更多检查:
commaPos = str.IndexOf(',');
if(commaPos != -1)
str = str.Substring(0, commaPos)
我假设你一开始就使用了一个字符串。如果你一开始使用的是数字,例如浮点数或双精度数,那么你可以将其强制转换为int
,然后执行myInt.ToString()
:
myInt = (int)double.Parse(myString)
这将使用当前区域设置解析双精度数字(在美国,我们使用 .
作为小数点)。但是,这再次假设您的输入字符串可以被解析。
String.Format("{0:0}", 123.4567); // "123"
如果您的初始值是一个十进制数字符串,您需要进行转换
String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture)) //3.5
Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));
使用:
public static class StringExtensions
{
/// <summary>
/// Cut End. "12".SubstringFromEnd(1) -> "1"
/// </summary>
public static string SubstringFromEnd(this string value, int startindex)
{
if (string.IsNullOrEmpty(value)) return value;
return value.Substring(0, value.Length - startindex);
}
}
我在这里更喜欢使用扩展方法,有两个原因:
示例: f1.Substring(directorypathLength).SubstringFromEnd(1)
自 C# 8.0 开始,使用 范围运算符 可以实现此操作。
string textValue = "2223,00";
textValue = textValue[0..^3];
Console.WriteLine(textValue);
这将输出字符串2223
。
0
表示它应该从字符串的第零个位置开始
..
表示它应该取两侧操作数之间的范围
^
表示它应该取相对于序列末尾的操作数
3
表示它应该从字符串的第三个位置结束
TrimEnd
。它既高效,又看起来很干净。"Name,".TrimEnd(',');
"123,45".TrimEnd(',')
将返回 "123,45"。 - phoogRemove last characters from a string if this character is...
Just fits me well. Appreciated. "oppa/ ".Trim().TrimEnd('/');
- it3xlstr = str.Split(',').Last();
string var = var.lastIndexOf(',');
,
总是在第三个位置上,那么第一种解决方案仍然可以使用,但是过早优化是浪费时间的可怕事情。 - Scott Rippey