C# float.Parse String

问题描述 投票:0回答:2

我是 C# 新手,需要从文件中读取

float
(x, y, z)
。 看起来像:

0 -0.01 -0.002

0.000833333333333 -0.01 -0.002

如果我尝试

float number = float.Parse("0,54"); // it works well, but
float number = float.Parse("0.54"); // gains exepction.

我从每行读取值的代码(可能会被窃听):

int begin = 0;
int end = 0;
for (int i = 0; i < tempLine.Length; i++)
{
    if (Char.IsWhiteSpace(tempLine.ElementAt(i)))
    {
        end = i;
        float value = float.Parse(tempLine.Substring(begin, end));
        begin = end;
        System.Console.WriteLine(value);
    }
}

有人可以帮忙吗?

c# .net string substring type-conversion
2个回答
42
投票

float.Parse(string)
方法默认使用您当前的区域性设置。看起来您的
CurrentCulture
NumberDecimalSeparator
属性
,
而不是
.

这就是为什么您在

FormatException
示例中得到
"0.54"

作为解决方案,您可以使用具有

.
作为
NumberDecimalSeparator
的文化,例如
InvariantCulture
作为
Parse
方法中的第二个参数,或者您可以
.Clone()
并设置它的
CurrentCulture
属性为
NumberDecimalSeparator

.

float number = float.Parse("0.54", CultureInfo.InvariantCulture);



8
投票
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.NumberFormat.NumberDecimalSeparator = "."; float number = float.Parse("0.54", culture);

:

 解析它
InvariantCulture

除此之外,解析线条的方式比应有的更复杂。您可以只分割线,而不是尝试处理索引:

var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);

© www.soinside.com 2019 - 2024. All rights reserved.