C# C将包含浮点的字符串转换为整数
以空字符串或包含1.2的字符串为例,将其转换为整数的最佳方法是什么?当然,int.TryParse会失败,我不想使用float.TryParse然后转换为int。也许您可以尝试使用字符串函数删除浮点后的所有内容,然后再转换为int。但说真的,我认为这并不比先转换为float,然后再转换为int好。解决方案1:转换为双文化相关 您可以使用Convert.ToDouble。但是,当心!仅当当前区域性设置中的数字分隔符为句点字符时,以下解决方案才有效C# C将包含浮点的字符串转换为整数,c#,parsing,floating-point,int,C#,Parsing,Floating Point,Int,以空字符串或包含1.2的字符串为例,将其转换为整数的最佳方法是什么?当然,int.TryParse会失败,我不想使用float.TryParse然后转换为int。也许您可以尝试使用字符串函数删除浮点后的所有内容,然后再转换为int。但说真的,我认为这并不比先转换为float,然后再转换为int好。解决方案1:转换为双文化相关 您可以使用Convert.ToDouble。但是,当心!仅当当前区域性设置中的数字分隔符为句点字符时,以下解决方案才有效 var a = (int)Convert.ToDo
var a = (int)Convert.ToDouble("1.2");
解决方案2:Convert.ToDouble独立于区域性
最好以独立的方式使用和转换当前区域性设置中的数字:
var a = (int)Convert.ToDouble("1.2", CultureInfo.InvariantCulture.NumberFormat);
解决方案3:解析和拆分
完成此任务的另一种方法是对已解析的字符串使用拆分:
var a = int.Parse("1.2".Split('.')[0]);
或:
笔记
如果要处理空字符串和空字符串,请编写一个方法并添加字符串。条件
要获取当前区域性设置的小数分隔符,可以使用属性。
你也应该注意避免。
明智地选择casting、Parse、TryParse或class。更多信息请访问:
我不知道解析为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;
}
为了使代码全球化,您需要替换代码。使用。我认为另一种方法是将字符串拆分成小数点。作为分隔符,然后对整数进行解析。当然,我还没有问您字符串是否可能包含像32.65秒37.56英里这样的值类型值 考虑到字符串中只有一个值字符串或数字,我可以在下面的行中想到一些东西:
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]);
}
除非希望将0.9f转换为0而不是1,否则需要先对其进行四舍五入。您可以使用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");
}
}
我也有同样的问题,最后使用了马克和达里乌兹的混合体:
if (num == "")
{
num = "0.00";
}
var num1 = (float)Convert.ToDouble(num);
Appart将其解析为一个float,然后对其进行涂脂抹粉,我不知道您如何做到这一点……intfloat.Parse1.2-这不是太多的工作。不过Ruby做到了这一点-1.234.to_i1@Gishu ... VB6就是这样做的,Int1.234得到1。但问题是关于C@MarkJ-是的,我注意到。。这就是为什么我投了菲利普一票。。在C语言中,解析和强制转换似乎是一种方法。相比之下,下面的答案似乎要复杂得多。@MarkJ:FYI VB.NET也接受这种语法,但例如Int1.000000返回1000000,因为整数结果可能与以下事实有关:在我的国家,它是默认的分隔符,但仍然值得注意。编辑:Convert.ToDouble也有相同的功能,因此这只是区域性数字格式的问题…在执行int32解析时,可能不需要int64返回。如果这样做,请不要忘记,十进制分隔符在不同的区域设置中是不同的。当然,我们的法国表亲使用逗号,我认为这是显而易见的:在俄罗斯,我们也使用逗号。别忘了十进制分隔符可以根据地区设置而有所不同。我补充了一条关于全球化的注释。谢谢“毫无疑问是最好的,”马克说+我这边一个。特别是Convert.ToDouble默认使用线程区域性设置和Windows区域设置中的十进制分隔符,它可以是逗号。通过传递CultureInfo.InvariantCulture.NumberFormat,可以强制它使用点
using VB = Microsoft.VisualBasic.CompilerServices;
class Program
{
static void Main(string[] args)
{
int i = VB.Conversions.ToInteger("1.2");
}
}
if (num == "")
{
num = "0.00";
}
var num1 = (float)Convert.ToDouble(num);