如何将带有浮点数的字符串转换为十进制?

How to convert string with float to decimal?

本文关键字:转换 字符串 十进制 浮点数      更新时间:2023-10-16

有很多关于将字符串转换为十进制浮点数的方法的讨论,但我没有在C++中找到我的问题的解决方案(python,C#等都有很好的和快速的(。让我简要描述一下算法。

首先,我们输入初始数的数字系统,并在字符串变量中输入浮点数。

int sys = 0;
std::cin >> sys;   //example: 16
string input = ""; 
std::cin >> input; //example: 7ff.12c 

然后将输入分为(双(和(整数(部分 然后为这两个部分调用函数void floatToDec(字符串输入、int sys、char 标志((标志'l' 表示左部分标志 'r' meens right part(。 为了节省result_intresult_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。(如果我没有错过的话(。

那么,我该如何解决这个问题呢?也许还有另一种转换方法?

#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;
}