我有一个这样的数字字符串2223,00
。我想将其转换为2223
。这就是:没有信息后的“ ”。假设在“ , ”之后只有两个小数。
我做了:
str = str.Remove(str.Length - 3, 3);
有没有更优雅的解决方案?也许使用其他功能?-我不喜欢输入明确的数字-
Answers:
您实际上可以只使用带有一个参数的Remove重载:
str = str.Remove(str.Length - 3);
但是,如果要避免对长度进行硬编码,则可以使用:
str = str.Remove(str.IndexOf(','));
,
总是在-3位置,那么第一个解决方案仍然可以,但是过早的优化是浪费时间的可怕事情。
这将返回给您一个字符串,其中不包括逗号后的所有内容
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
在此示例中,我选择不变文化,但您可以使用所需的文化。
我更喜欢使用Formatting函数,因为您永远不知道小数点将来是否可能包含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)
请尝试以下方法。它为我工作:
str = str.Split(',').Last();