0

繰り返しますが、私の問題と質問の1つに戻ってきました。

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

2 つの数が等しくないのはなぜですか? 前もって感謝します!

4

4 に答える 4

12

これはおそらくロケールに関連しています。これを試してください、うまくいくはずです

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

また、数字を印刷してみてください。違いがわかります。

于 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 で、2 番目は 8585 です。

于 2012-11-20T13:19:31.247 に答える
0

CurrentCultureスレッドの にはNumberFormatInfoNumberDecimalSeparatoris notがあると推測されます"."

Convert.ToDouble(str1, System.Globaliztion.CultureInfo.InvariantCulture)スレッドのローカル カルチャを使用すると、無視されます。

于 2012-11-20T13:20:37.083 に答える