获取可以为空或包含“1.2”的字符串的最佳方法是什么,并将其转换为整数?当然,int.TryParse
失败,我不想使用float.TryParse
,然后转换为int
。
答案 0 :(得分:35)
Convert.ToDouble
(取决于文化)您可以使用Convert.ToDouble
。但是,要小心!仅当当前区域性设置中的数字分隔符是句点字符时,以下解决方案才有效。
var a = (int)Convert.ToDouble("1.2");
Convert.ToDouble
(与文化无关)最好使用IFormatProvider
并以独立方式从当前文化设置转换数字:
var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat);
完成此任务的另一种方法是在解析后的字符串上使用Split:
var a = int.Parse("1.2".Split('.')[0]);
或者:
var a = int.Parse("1.2".Split('.').First());
IsNullOrEmpty
condition。NumberFormatInfo.NumberDecimalSeparator
属性。Parse
,TryParse
或Convert
。阅读更多:
答案 1 :(得分:4)
我不知道解析为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
。
答案 2 :(得分:1)
也许您可以尝试使用字符串函数删除浮点后的所有内容,然后转换为int。但严重的是,我认为这不比转换为float然后转换为int更好。
答案 3 :(得分:1)
int a = (int)Math.Round(float.Parse("0.9"));
除非您希望0.9f转换为0而不是1,否则您需要先将其舍入。
答案 4 :(得分:0)
我认为另一种方法是将字符串拆分为小数(。)作为分隔符,然后解析整数。当然,我还没问你字符串是否包含类似"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]);
}
答案 5 :(得分: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");
}
}
答案 6 :(得分:0)
我遇到了同样的问题,最终使用了Mark和Dariusz的混合体:
if (num == "")
{
num = "0.00";
}
var num1 = (float)Convert.ToDouble(num);