使用哪些 NumberStyles 才能进行正确的数字转换?

Which NumberStyles to use in order to have the right number conversion?

提问人:KiraKo 提问时间:1/26/2023 最后编辑:NetMageKiraKo 更新时间:1/26/2023 访问量:25

问:

我正在从 excel 工作表中读取值。 单元格的正确值是 -0.09,但 excel 将其读取为“-9.9.329999999999999994E-2” 我创建了一个处理区域设置(数字格式的逗号和句点)的方法,以正确转换值并处理Excel误解。

一切都很好,直到我通过 NumberStyles 进行转换的最后一条指令 最后一条指令的结果是 -933 而不是 -0.09

为了得到正确的答案,我需要做些什么改变?

static void Main(string[] args)
    {
        String data = "-9.3299999999999994E-2";
        double number = 0.0;

        string s = Regex.Replace(data, @"\s", "");

        //Handle scientif Notation Coming from Excel e.g: 1.234567E-06
        if (s.ToUpper().Contains("E"))
        {
            try
            {
                number = double.Parse(s.Trim(), CultureInfo.InvariantCulture);
                s = number.ToString();
            }
            catch (FormatException e)
            {
                throw new FormatException();
            }
        }
        var cultureInfo = CultureInfo.InvariantCulture;
        // if the first regex matches, the number string is in us culture
        if (Regex.IsMatch(s, @"^(:?[\d,]+\.)*\d+$"))
        {
            cultureInfo = new CultureInfo("en-US");
        }
        // if the second regex matches, the number string is in de culture
        else if (Regex.IsMatch(s, @"^(:?[\d.]+,)*\d+$"))
        {
            cultureInfo = new CultureInfo("de-DE");
        }
        NumberStyles styles = NumberStyles.Number ;

        bool isDouble = double.TryParse(s.Trim(),styles, cultureInfo, out number);
        if (!isDouble) //if conversion fails            
            throw new FormatException();

        System.Console.WriteLine ( number );
}
C# 类型转换 精度 区域设置

评论

0赞 NetMage 1/26/2023
为什么要从 Excel 中检索值作为 ?您是否正在阅读 CSV 文件?为什么要进行多次解析转换(例如科学记数法)?string
0赞 KiraKo 1/26/2023
我正在尝试处理每个区域设置,以防用户使用具有美国区域设置或其他设置的机器。所以我做了不止一次的转换尝试
0赞 NetMage 1/26/2023
但是您不止一次处理科学记数法 - 这毫无意义(例如,您重新分配)。s

答: 暂无答案