如何将带浮点数的字符串转换为十进制? 关于用浮点到十进制浮点转换字符串的方法有很多讨论,但是我没有找到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 int和result\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;
而(i std::cout在小数部分拆分字符串,然后使用std::stoi
。