如何将带有浮点数的字符串转换为十进制?
How to convert string with float to decimal?
有很多关于将字符串转换为十进制浮点数的方法的讨论,但我没有在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_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。(如果我没有错过的话(。
那么,我该如何解决这个问题呢?也许还有另一种转换方法?
#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;
}
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数