从C#中的字符串中删除最后一个字符.优雅的方式?

Kan*_*ani 84 .net c# string

我有这样的数字字符串2223,00.我想把它变成2223.这是:没有" , " 之后的信息.假设" , " 之后只有两位小数.

我做了:

str = str.Remove(str.Length - 3, 3);
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?也许使用其他功能? - 我不喜欢把明确的数字 -

Ree*_*sey 171

实际上你可以使用带有一个参数的Remove重载:

str = str.Remove(str.Length - 3);
Run Code Online (Sandbox Code Playgroud)

但是,如果您试图避免硬编码长度,可以使用:

str = str.Remove(str.IndexOf(','));
Run Code Online (Sandbox Code Playgroud)

  • 第二种解决方案更易于阅读,理解和维护,而且**低级**性能方面,差异非常微不足道.如果你知道`,`总是在-3位置,那么第一个解决方案仍然可以,但是*过早优化*是一个可怕的事情,浪费你的时间. (6认同)
  • @Kani第一个是效率最高的 - 但我完全赞同斯科特.我会总是选择第二个,除非我知道,在分析后,有一个性能.瓶颈在这里.这些(以及大多数其他答案)都将非常快 - 几乎可以用于所有目的. (2认同)

k.m*_*k.m 16

也许这个:

str = str.Split(",").First();
Run Code Online (Sandbox Code Playgroud)

  • 甚至是`str.Split(",")[0]` (5认同)

Chr*_*ens 6

这将返回一个字符串,不包括逗号后面的所有内容

str = str.Substring(0, str.IndexOf(','));
Run Code Online (Sandbox Code Playgroud)

当然,这假设你的字符串实际上有一个带小数的逗号.如果没有,上面的代码将失败.你想做更多的检查:

commaPos = str.IndexOf(',');
if(commaPos != -1)
    str = str.Substring(0, commaPos)
Run Code Online (Sandbox Code Playgroud)

我假设你正在使用字符串开始.理想情况下,如果你正在使用一个数字开头,比如一个浮点数或双数,你可以把它转换成一个int,然后myInt.ToString()像:

myInt = (int)double.Parse(myString)
Run Code Online (Sandbox Code Playgroud)

这使用当前文化解析double(在美国,我们.用于小数点).但是,这再次假设您的输入字符串可以被解析.