Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
如何将带浮点数的字符串转换为十进制? 关于用浮点到十进制浮点转换字符串的方法有很多讨论,但是我没有找到C++中的问题(Python,C等)的解决方法,它们很好,很快。让我简单描述一下算法_C++_Decimal_Number Systems - Fatal编程技术网

如何将带浮点数的字符串转换为十进制? 关于用浮点到十进制浮点转换字符串的方法有很多讨论,但是我没有找到C++中的问题(Python,C等)的解决方法,它们很好,很快。让我简单描述一下算法

如何将带浮点数的字符串转换为十进制? 关于用浮点到十进制浮点转换字符串的方法有很多讨论,但是我没有找到C++中的问题(Python,C等)的解决方法,它们很好,很快。让我简单描述一下算法,c++,decimal,number-systems,C++,Decimal,Number Systems,首先,我们输入初始数的数字系统,然后将浮点数输入字符串变量 int sys = 0; std::cin >> sys; //example: 16 string input = ""; std::cin >> input; //example: 7ff.12c 然后将输入划分为右(双)和左(int)部分 然后为这两个部分调用函数void floatToDec(字符串输入,int sys,char标志)(标志“l”表示左部分标志“r”表示右部分)。 为了保存res

首先,我们输入初始数的数字系统,然后将浮点数输入字符串变量

int sys = 0;
std::cin >> sys;   //example: 16
string input = ""; 
std::cin >> input; //example: 7ff.12c 
然后将输入划分为(双)和(int)部分 然后为这两个部分调用函数void floatToDec(字符串输入,int sys,char标志)(标志“l”表示左部分标志“r”表示右部分)。 为了保存result\u intresult\u double我们将它们设置为全局

功能:

string alf = { '0','1','2', .. , 'x', 'y', 'z' }
int counter = 0; 
int_temp = 0;
for (int i = size(input); i >= 0; i--){
    int index = indexOf(input[i], alf);
    switch (flag) {
        case 'r':
            result_double += index * pow(sys, counter);
            counter--;
            break;
        case 'l':
            int_temp = result_int + index * pow(sys, counter);
            if (int_temp < 0) {
                result_int = 0;
                return 1; // out of integer borders
            }
            result_int = int_temp;
            counter++;
            break;
      }
}
return 0;
string alf={'0','1','2',..'x','y','z'}
int计数器=0;
内部温度=0;
对于(int i=大小(输入);i>=0;i--){
int index=indexOf(输入[i],alf);
开关(标志){
案例“r”:
结果_double+=指数*功率(系统,计数器);
计数器--;
打破
案例“l”:
int_temp=结果int+索引*pow(系统,计数器);
如果(内部温度<0){
结果_int=0;
返回1;//超出整数边框
}
结果=内部温度;
计数器++;
打破
}
}
返回0;
对这两部分执行函数后,我们求和它们。变成一个浮子。这个总数就是结果

问题

此浮点的整数部分不能大于最大整数值(dec中为2147483647),但浮点可以为2^38-1,因为指数有8位。与double相同,其指数有11位,值可以是2^52-1。(如果我没有错的话)

那么,我该如何解决这个问题呢?是否有其他转换方法?

#包括
#include <iostream>

int getNumber(char c)
{
    if (c >= '0' && c <= '9')
        return c - '0';
    else
        return (c - 'a') + 10;
}

int main()
{
    int sys;
    std::cin >> sys;
    std::string s;
    std::cin >> s;

    long long result_int = 0;
    std::string::size_type i = 0;
    while (s[i] != '.')
        result_int = result_int * sys + getNumber(s[i++]);
    ++i;
    long long result_double = 0;
    while (i < s.size())
        result_double = result_double * sys + getNumber(s[i++]);

    std::cout << result_int << ' ' << result_double << std::endl;
}
int getNumber(字符c) { 如果(c>='0'&&c>sys; std::字符串s; 标准:cin>>s; 长结果_int=0; std::string::size_type i=0; 而(s[i]!='。) result_int=result_int*sys+getNumber(s[i++]); ++一,; 长-长结果_double=0; 而(istd::cout在小数部分拆分字符串,然后使用
std::stoi