有很多关于将浮点数转换为十进制浮点数的方法的讨论,但我没有在 C++ 中找到解决我的问题的方法(python、C# 等有很好和快速的方法)。让我简要描述一下算法。
首先,我们输入初始数字的数字系统,并将浮点数输入到字符串变量中。
int sys = 0;
std::cin >> sys; //example: 16
string input = "";
std::cin >> input; //example: 7ff.12c
然后将输入分成右(double)和左(int)部分然后为这两个部分调用函数void floatToDec(string input, int sys, char flag)(标志'l'表示左部分标志'r'表示右部分) . 为了保存result_int和result_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;
在为这两个部分执行函数之后,我们将它们相加。成一个浮子。这个总和就是结果
问题
此浮点数的整数部分不能超过整数最大值(dec 中的 2,147,483,647),但浮点数可以是 2^38-1,因为指数有 8 位。与 double 相同,它的指数有 11 位,值可以是 2^52-1。(如果我没记错的话)。
那么,我该如何解决这个问题?可能有另一种转换方式吗?