0

double 変数からすべての数値を取得し、小数点とマイナスを削除し、すべての数字を個別に追加するこのプログラムがあります。ここにあります:

static void Main(string[] args)
    {

            double input = double.Parse(Console.ReadLine());

                char[] chrArr = input.ToString().ToCharArray();

                input = 0;

                foreach (var ch in chrArr)
                {
                    string somestring = Convert.ToString(ch);
                    int someint = 0;
                    bool z = int.TryParse(somestring, out someint);
                    if (z == true)
                    {
                        input += (ch - '0');
                    }
                }

問題は、たとえば、「9999999999999999999999999999999....」などと入力すると、次のように表され1.0E+254、プログラムが追加さ1+0+2+5+4れて終了することです。これを適切に機能させる効率的な方法はありますか? double の代わりに string を使用してみましたが、動作が遅すぎます..

4

3 に答える 3

6

"9999999999999999999999999999999..."double として格納することはできませんdouble。a の精度は 15 桁または 16 桁のみです。コンパイラは、求めているものに最も近い double を提供しています。これです1E254

string使用が遅い理由を調べるか、使用しますBigInteger

于 2013-11-01T13:56:40.187 に答える
3

他の回答が示すように、保存されるのは入力された数字とまったく同じではありませんが、表現できる最も近い double 値になります。

ただし、すべての数字を検査したい場合は、フォーマット文字列F0として使用してください。

char[] chrArr = input.ToString("F0").ToCharArray();
于 2013-11-01T13:59:35.840 に答える
0

Double の 64 ビットと比較して 128 ビットの数値であるため、Decimal にはより大きな数値を格納できます。

しかし、明らかにまだ限界があります。

于 2013-11-01T13:57:43.797 に答える