我有一个像2223,00
这样的数字字符串。我想将其转换为2223
。这是:没有信息 之后的,。假设“,”之后只有两位小数。
我做了:
str = str.Remove(str.Length - 3, 3);
有更优雅的解决方案吗?也许使用其他功能? - 我不喜欢用明确的数字 -
答案 0 :(得分:170)
实际上你可以使用带有一个参数的Remove重载:
str = str.Remove(str.Length - 3);
但是,如果您试图避免硬编码长度,可以使用:
str = str.Remove(str.IndexOf(','));
答案 1 :(得分:15)
也许这就是:
str = str.Split(",").First();
答案 2 :(得分:6)
这将返回一个字符串,不包括逗号后的所有内容
str = str.Substring(0, str.IndexOf(','));
当然,这个假设你的字符串实际上有一个带小数的逗号。如果没有,上面的代码将失败。你想做更多的检查:
commaPos = str.IndexOf(',');
if(commaPos != -1)
str = str.Substring(0, commaPos)
我假设您正在使用字符串开头。理想情况下,如果您正在使用数字开头,例如浮点数或双精度数,则可以将其转换为int
,然后执行myInt.ToString()
之类的操作:
myInt = (int)double.Parse(myString)
这使用当前文化解析double(在美国,我们使用.
表示小数点)。但是,这再次假设您的输入字符串可以被解析。
答案 3 :(得分:4)
String.Format("{0:0}", 123.4567); // "123"
如果您的初始值是字符串中的小数,则需要转换
String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture)) //3.5
在这个例子中,我选择了Invariant culture,但你可以使用你想要的那个。
我更喜欢使用格式化功能,因为您永远不知道小数是否可能包含2或3个前导数字。
修改:您还可以使用Truncate
删除所有,或。
Console.WriteLine(Decimal.Truncate(Convert.ToDecimal("3,5")));
答案 4 :(得分:1)
您可以使用TrimEnd
。它也很有效,看起来很干净。
"Name,".TrimEnd(',');
答案 5 :(得分:1)
使用:
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);
}
}
我更喜欢这里的扩展方法有两个原因:
Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
答案 6 :(得分:1)
您可以使用LastIndexOf和Substring组合来获取sting中逗号最后一个索引左侧的所有字符。
string var = var.Substring(0,var.LastIndexOf(&#39;,&#39;));
答案 7 :(得分:0)
尝试以下方法。它对我有用:
str = str.Split(',').Last();
答案 8 :(得分:0)
从 C# 8.0 开始,就可以使用 range operator 来做到这一点。
string textValue = "2223,00";
textValue = textValue[0..^3];
Console.WriteLine(textValue);
这将输出字符串 2223
。
0
表示它应该从字符串中的第零个位置开始
..
表示它应该取两边操作数之间的范围
^
表示它应该采用相对于序列末尾的操作数
3
表示它应该从字符串中的第三个位置结束
答案 9 :(得分:-2)
使用lastIndexOf。像:
string var = var.lastIndexOf(',');