Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以与JavaScript'相同的方式将C中的浮点数转换为Base36;s.toString(36)做到了_Javascript_C#_Encoding_Base36 - Fatal编程技术网

如何以与JavaScript'相同的方式将C中的浮点数转换为Base36;s.toString(36)做到了

如何以与JavaScript'相同的方式将C中的浮点数转换为Base36;s.toString(36)做到了,javascript,c#,encoding,base36,Javascript,C#,Encoding,Base36,我正在尝试将一些代码转换为C#(来自JavaScript),我需要将一个双倍数字(0.0403648483168558814)转换为C#的“.toString(36)/Base36” JavaScript代码如下: var num = 0.04036483168558814; var n = num.toString(36); 输出(n)如下: 我需要用C#得到上述相同的结果,那么如何用C#得到相同的结果呢 我应用了一些代码,但它们不起作用。。 下面是我的代码(由C#编写): (一) 或

我正在尝试将一些代码转换为C#(来自JavaScript),我需要将一个双倍数字(0.0403648483168558814)转换为C#的“.toString(36)/Base36”

JavaScript代码如下:

 var num = 0.04036483168558814;
 var n = num.toString(36);
输出(n)如下:

我需要用C#得到上述相同的结果,那么如何用C#得到相同的结果呢

我应用了一些代码,但它们不起作用。。 下面是我的代码(由C#编写):

(一)

(二)

private const string CharList=“0123456789abcdefghijklmnopqrstuvwxyz”;
公共静态字符串编码(长输入)
{
如果(输入<0)抛出新ArgumentOutOfRangeException(“输入”,输入,“输入不能为负”);
char[]clistarr=CharList.ToCharArray();
var result=新堆栈();
while(输入!=0)
{
结果.推送(clistarr[输入%36]);
输入/=36;
}
返回新字符串(result.ToArray());
}
string OutputString=Encode(Int64.Parse(“0.040364483168558814”);
或
string OutputString=Encode(Int64.Parse(“0.040364483168558814.Substring(2));
根据,您可以使用
Convert.ToString
方法将整数转换为以2、8、10或16为基数的字符串表示形式

如果要将数字转换为基数36,可以使用现有的第三方库:

看看这个

或者您可以编写自己的转换器。
例如,此类将整数转换为基数36:

public static class Base36Converter
{
    private const int Base = 36;
    private const string Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    public static string ConvertTo(int value)
    {
        string result = "";

        while (value > 0)
        {
            result = Chars[value % Base] + result; // use StringBuilder for better performance
            value /= Base;
        }

        return result;
    }
}
请注意,结果将按大端顺序排列。

例如,在base-36中,十进制
1296
将是
100

我编写了一些代码来获得这个结果

代码如下:

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

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);
        }
//==========================================

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);
        }
私有字符串编码(双输入)
{
var result=新堆栈();
char[]clistarr=“0123456789abcdefghijklmnopqrstuvxyz”。ToCharArray();
Int64 inputValInt=0;
字符串inputValP=“”;
双输入值n=0;
字符串ReturnsVal=“”;
if(input.ToString()!=“”)
{
尝试
{
if(input.ToString()包含(“.”)
{
inputValP=input.ToString().Substring(0,input.ToString().IndexOf(“.”);
inputValInt=Int64.Parse(inputValP);
如果(输入有效!=0)
{
while(输入有效!=0)
{
结果.推送(clistarr[inputValInt%36]);
输入有效/=36;
}
char[]RevArr1=result.ToArray();
数组。反向(RevArr1);
结果=新堆栈();
对于(int i=(RevArr1.Length-1);i>=0;i--)
{
结果推送(RevArr1[i]);
}
结果.推('.');
}
其他的
{
结果推送('0');
结果.推('.');
}
inputValN=输入-输入有效;
双输入值=输入值n;
int CountLoop=0;
while(CountLoop<11)
{
双tempVal=(inputVal*36);
int Start=tempVal.ToString(“R”).IndexOf(“.”);
如果(开始>0)
{
inputValP=tempVal.ToString(“R”).子字符串(0,开始);
inttopval=Int16.Parse(inputValP);
结果推送(clistarr[TopVal]);
inputVal=tempVal-TopVal;
}
CountLoop++;
}
char[]RevArr=result.ToArray();
数组。反向(RevArr);
ReturnsVal=新字符串(RevArr);
}
其他的
{
inputValInt=Convert.ToInt64(输入);
while(输入有效!=0)
{
结果.推送(clistarr[inputValInt%36]);
输入有效/=36;
}
char[]RevArr=result.ToArray();
ReturnsVal=新字符串(RevArr);
}
}
捕获(异常ee)
{
返回(“”);
}
}
其他的
{
返回(“”);
}
返回(ReturnsVal);
}

这里是一个递归函数:

using System;

class Program {
   static string encode(int nIn, int nBase) {
      int n = nIn / nBase;
      char c = "0123456789abcdefghijklmnopqrstuvwxyz"[nIn % nBase];
      return n > 0 ? encode(n, nBase) + c : c.ToString();
   }

   static void Main() {
      var n = 1577858399;
      var s = encode(n, 36);
      Console.WriteLine(s == "q3ezbz");
   }
}

请注意:此示例无法正常工作。由于行
result+=Chars[value%36],结果字符串与它应该的相反是向后的,实际上应该是
result=Chars[value%36]+result@Nick谢谢你的更正。我已更改此代码以使结果为big-endian:)
        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);
        }
using System;

class Program {
   static string encode(int nIn, int nBase) {
      int n = nIn / nBase;
      char c = "0123456789abcdefghijklmnopqrstuvwxyz"[nIn % nBase];
      return n > 0 ? encode(n, nBase) + c : c.ToString();
   }

   static void Main() {
      var n = 1577858399;
      var s = encode(n, 36);
      Console.WriteLine(s == "q3ezbz");
   }
}