如何将一个可能为空或包含 "1.2" 等内容的字符串转换为整数?int.TryParse
无法成功,我也不想使用 float.TryParse
再转换为 int
。
如何将一个可能为空或包含 "1.2" 等内容的字符串转换为整数?int.TryParse
无法成功,我也不想使用 float.TryParse
再转换为 int
。
var a = (int)Convert.ToDouble("1.2");
var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat);
var a = int.Parse("1.2".Split('.')[0]);
或者:
var a = int.Parse("1.2".Split('.').First());
IsNullOrEmpty
条件。NumberFormatInfo.NumberDecimalSeparator
属性。Parse
、TryParse
或Convert
类。了解更多信息:
Convert.ToDouble
使用线程区域设置中的十进制分隔符(默认为Windows区域设置),它可以是逗号。您可以通过传递CultureInfo.InvariantCulture.NumberFormat
来强制使用点。 - MarkJ我不知道将其解析为float
并转换为int
有什么问题。我怀疑其他任何方法都不会更有效,但这里是一次尝试:
//allows empty strings and floating point values
int ParseInt(string s, bool alwaysRoundDown = false)
{
//converts null/empty strings to zero
if (string.IsNullOrEmpty(s)) return 0;
if (!s.Contains(".")) return int.Parse(s);
string parts = s.Split(".");
int i = int.Parse(parts[0]);
if (alwaysRoundDown || parts.Length==1) return i;
int digitAfterPoint = int.Parse(parts[1][0]);
return (digitAfterPoint < 5) ? i : i+1;
}
"."
替换为System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
。int a = (int)Math.Round(float.Parse("0.9"));
如果你不想让0.9f转换为0而不是1,你需要先进行四舍五入。
我认为另一种方法是将字符串分割成多个部分,以小数点(.)作为分隔符,然后解析整数。当然,我还没有问过您是否可能包含类似于"37.56 miles in 32.65 seconds"
类型的值。
考虑到字符串中只会有一个值(字符串或数字),我可以想到以下内容:
public int64 GetInt64(string input)
{
if (string.IsNullOrEmpty(input)) return 0;
// Split string on decimal (.)
// ... This will separate all the digits.
//
string[] words = input.Split('.');
return int.Parse(words[0]);
}
你可以使用Visual Basic运行库从C#中实现这个功能。
你需要向你的解决方案添加对程序集Microsoft.VisualBasic.dll的引用。
然后,以下代码将完成你的转换:
using VB = Microsoft.VisualBasic.CompilerServices;
class Program
{
static void Main(string[] args)
{
int i = VB.Conversions.ToInteger("1.2");
}
}
我曾经遇到过同样的问题,最终采用了Mark和Dariusz的混合方法:
if (num == "")
{
num = "0.00";
}
var num1 = (float)Convert.ToDouble(num);
(int)float.Parse("1.2")
- 这不是太麻烦。Ruby 可以这样做 -"1.234".to_i
得到 1。 - GishuInt("1.234")
得到1。但是问题是关于C#的。 - MarkJInt(1.000000)
返回的整数结果为1000000
(可能与我的国家使用,
作为默认分隔符有关,但仍值得注意)。编辑:Convert.ToDouble也是如此,因此这只是与Culture-NumberFormat有关的问题... - Levite