4

一部のコードを (JavaScript から) C# に変換しようとしています。C# で double の数値 (0.04036483168558814) を ".toString(36)/Base36" に変換する必要があります。

ここに JavaScript コード:

 var num = 0.04036483168558814;
 var n = num.toString(36);

以下の出力(n):

0.1gb9f0lx08ij9wwfwkyk5d0a4i

C# で上記と同じ結果が必要なので、C# で同じ結果を得るにはどうすればよいですか??

私はいくつかのコードを適用しましたが、それらは機能していません..以下の私のコード(C#による):

1)

string OutputVal = Convert.ToString(Int64.Parse("0.04036483168558814"), 36);

また

string OutputVal = Convert.ToString(Int64.Parse("0.04036483168558814".Substring(2)), 36);

2)

private const string CharList = "0123456789abcdefghijklmnopqrstuvwxyz";
        public static String Encode(long input)
        {
            if (input < 0) throw new ArgumentOutOfRangeException("input", input, "input cannot be negative");

            char[] clistarr = CharList.ToCharArray();
            var result = new Stack<char>();
            while (input != 0)
            {
                result.Push(clistarr[input % 36]);
                input /= 36;
            }
            return new string(result.ToArray());
        }

string OutputString = Encode(Int64.Parse("0.04036483168558814"));
or
string OutputString = Encode(Int64.Parse("0.04036483168558814".Substring(2)));
4

4 に答える 4

2

この結果を得るためにいくつかのコードを書きました。

コードは次のとおりです。

//==========================================

string Results = Encode(0.04036483168558814);

//==========================================

        private string Encode(double input)
        {

            var result = new Stack<char>();
            char[] clistarr = "0123456789abcdefghijklmnopqrstuvwxyz".ToCharArray();
            Int64 inputValInt = 0;
            string inputValP = "";
            double inputValN = 0;
            string ReturnsVal = "";
            if (input.ToString() != "")
            {
                try
                {
                    if (input.ToString().Contains("."))
                    {
                        inputValP = input.ToString().Substring(0, input.ToString().IndexOf("."));

                        inputValInt = Int64.Parse(inputValP);
                        if (inputValInt != 0)
                        {
                            while (inputValInt != 0)
                            {
                                result.Push(clistarr[inputValInt % 36]);
                                inputValInt /= 36;
                            }
                            char[] RevArr1 = result.ToArray();
                            Array.Reverse(RevArr1);
                            result = new Stack<char>();
                            for (int i = (RevArr1.Length - 1); i >= 0; i--)
                            {
                                result.Push(RevArr1[i]);
                            }
                            result.Push('.');
                        }
                        else
                        {
                            result.Push('0');
                            result.Push('.');
                        }
                        inputValN = input - inputValInt;
                        double inputVal = inputValN;

                        int CountLoop = 0;
                        while (CountLoop < 11)
                        {

                            double tempVal = (inputVal * 36);
                            int Start = tempVal.ToString("R").IndexOf(".");
                            if (Start > 0)
                            {
                                inputValP = tempVal.ToString("R").Substring(0, Start);

                                int TopVal = Int16.Parse(inputValP);
                                result.Push(clistarr[TopVal]);
                                inputVal = tempVal - TopVal;
                            }
                            CountLoop++;
                        }
                        char[] RevArr = result.ToArray();
                        Array.Reverse(RevArr);
                        ReturnsVal = new string(RevArr);
                    }
                    else
                    {
                        inputValInt = Convert.ToInt64(input);
                        while (inputValInt != 0)
                        {
                            result.Push(clistarr[inputValInt % 36]);
                            inputValInt /= 36;
                        }
                        char[] RevArr = result.ToArray();
                        ReturnsVal = new string(RevArr);
                    }

                }
                catch (Exception ee)
                {
                    return ("");
                }
            }
            else
            {
                return ("");
            }
            return (ReturnsVal);
        }
于 2016-01-14T04:35:12.077 に答える