C# C-字符串到数字

C# C-字符串到数字,c#,C#,我再次提出我的一个问题和疑问 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace compare_string { class Program { static void Main(string[] args) { string str1 = "85.85000000

我再次提出我的一个问题和疑问

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

namespace compare_string
   {
     class Program
     {
        static void Main(string[] args)
        {
            string str1 = "85.8500000000000";
            string str2 = "85.85";
            double num1 = Convert.ToDouble(str1);
            double num2 = Convert.ToDouble(str2);
            if (num1 != num2)
            {
                 Console.WriteLine("Unequal");
            }
            else {
                 Console.WriteLine("Equal");
            }
             Console.ReadKey();
         }
    }
  }

为什么这两个数字不相等?提前谢谢

这很可能与您的区域设置有关。 试试这个,应该有用

double num1 = Convert.ToDouble(str1,CultureInfo.InvariantCulture);
double num2 = Convert.ToDouble(str2,CultureInfo.InvariantCulture);

只要试着打印你的号码,你就会看到不同。

我想这是因为你当前的语言环境。你有没有研究过这些价值观


对我来说,在德国,第一个数字是85850000000000,第二个是8585。

原因是您在一台使用逗号作为十进制字符而不是点的机器上运行它。 当您将代码更改为以下内容时,它将以相等的速度打印

这再次说明了为什么您总是应该在这样的方法中指定区域性。指定以下内容时,原始代码将与点一起使用:

CultureInfo位于命名空间系统中。全球化。

猜测是线程的当前区域性具有NumberFormatInfo,而NumberDecimalSeparator没有


如果使用Convert.ToDoublestr1、System.globalization.CultureInfo.InvariantCulture,线程的本地区域性将被忽略。

当我运行此代码时,它们显示为相等@κωστας∑οφός你确定吗。您的系统十进制分隔符?另外,尽量避免浮点数之间的比较,因为它们通常都是一个问题,请参阅此处:@tr3如果不允许比较数字,数字有什么用?你知道一个应用程序吗?@JeppeStigNielsen我相信他是想比较浮点数之间的相等。最好看看浮点之间的差异是否在指定范围内,而不是完全相等。我应该使用一个库,即使用****访问CultureInfo。***它在System.GlobalizationThank中。它正在工作。我从csv文件中读取这些值,并希望比较这些值。再次感谢汉克斯,我的朋友。我有点,因为我从csv文件中读取这些值。再次感谢您的建议
string str1 = "85,8500000000000";
string str2 = "85,85";
string str1 = "85.8500000000000";
string str2 = "85.85";
double num1 = Convert.ToDouble(str1, CultureInfo.InvariantCulture);
double num2 = Convert.ToDouble(str2, CultureInfo.InvariantCulture);