0

我再次带着我的一个问题和疑问回来。

 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();
         }
    }
  }

为什么给出两个数字不相等?提前致谢!

4

4 回答 4

12

这很可能与您的语言环境有关。试试这个,它应该工作

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

Alo 尝试打印您的数字,您会看到不同之处。

于 2012-11-20T13:19:20.563 回答
5

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

string str1 = "85,8500000000000";
string str2 = "85,85";

这再次说明了为什么你总是应该在这样的方法中指定一种文化。当您指定时,您的原始代码将使用点CultureInfo.InvariantCulture

string str1 = "85.8500000000000";
string str2 = "85.85";
double num1 = Convert.ToDouble(str1, CultureInfo.InvariantCulture);
double num2 = Convert.ToDouble(str2, CultureInfo.InvariantCulture);

CultureInfo在命名空间中System.Globalization

于 2012-11-20T13:20:12.447 回答
1

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

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

于 2012-11-20T13:19:31.247 回答
0

A guess would be that the CurrentCulture of your thread has a NumberFormatInfo where the NumberDecimalSeparator is not ".".

If you use Convert.ToDouble(str1, System.Globaliztion.CultureInfo.InvariantCulture) the local culture of your thread will be disregarded.

于 2012-11-20T13:20:37.083 回答