【发布时间】:2011-11-11 18:51:03
【问题描述】:
我有一个像 2223,00 这样的数字字符串。我想将其转换为2223。这是:在“,”之后 没有信息。假设“,”后面只有两位小数。
我做到了:
str = str.Remove(str.Length - 3, 3);
有没有更优雅的解决方案?也许使用其他功能? -我不喜欢输入明确的数字-
【问题讨论】:
我有一个像 2223,00 这样的数字字符串。我想将其转换为2223。这是:在“,”之后 没有信息。假设“,”后面只有两位小数。
我做到了:
str = str.Remove(str.Length - 3, 3);
有没有更优雅的解决方案?也许使用其他功能? -我不喜欢输入明确的数字-
【问题讨论】:
您实际上可以只使用带有一个参数的 Remove 重载:
str = str.Remove(str.Length - 3);
但是,如果您想避免对长度进行硬编码,您可以使用:
str = str.Remove(str.IndexOf(','));
【讨论】:
, 始终位于位置-3,那么第一个解决方案仍然可以,但是过早优化 是一件浪费您时间的可怕事情。
也许是这样的:
str = str.Split(",").First();
【讨论】:
2 的第二个参数传递给Split,因为您不再关心逗号。
这将返回一个字符串,不包括逗号后的所有内容
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)
这使用当前文化解析双精度数(在美国,我们使用. 表示小数点)。但是,这再次假设您的输入字符串可以被解析。
【讨论】:
String.Format("{0:0}", 123.4567); // "123"
如果你的初始值是小数转换成字符串,则需要转换
String.Format("{0:0}", double.Parse("3.5", CultureInfo.InvariantCulture)) //3.5
在这个例子中,我选择了不变的文化,但你可以使用你想要的。
我更喜欢使用格式化功能,因为您永远不知道小数将来是否包含 2 或 3 个前导数字。
编辑:您也可以使用 Truncate 删除所有 , 或 .
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);
}
}
我更喜欢这里的扩展方法有两个原因:
Example: f1.Substring(directorypathLength).SubstringFromEnd(1)
【讨论】:
您可以结合使用 LastIndexOf 和 Substring 来获取字符串中逗号最后一个索引左侧的所有字符。
string var = var.Substring(0, var.LastIndexOf(','));
【讨论】:
您可以使用TrimEnd。它也很高效,看起来很干净。
"Name,".TrimEnd(',');
【讨论】:
"123,45".TrimEnd(',') 将返回“123,45”。
Remove last characters from a string if this character is... 正好适合我。赞赏。 "oppa/ ".Trim().TrimEnd('/');
试试下面的。它对我有用:
str = str.Split(',').Last();
【讨论】:
从 C# 8.0 开始,可以使用 range operator 来执行此操作。
string textValue = "2223,00";
textValue = textValue[0..^3];
Console.WriteLine(textValue);
这将输出字符串2223。
0 表示它应该从字符串中的第零位开始
.. 表示它应该取两边操作数之间的范围
^ 表示它应该采用相对于序列末尾的操作数
3 表示它应该从字符串的第三个位置结束
【讨论】:
使用 lastIndexOf。喜欢:
string var = var.lastIndexOf(',');
【讨论】: