当前位置: 首页 > 知识库问答 >
问题:

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

广楚
2023-03-14

关于将带浮点数的字符串转换为十进制浮点数的方法有很多讨论,但我没有找到用C语言解决问题的方法(python、C#等)

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

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

然后将输入分成右(double)部分和左(int)部分,然后为这两部分调用函数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中为2147483647),但浮点可以为2^38-1,因为指数有8位。与double相同,其指数有11位,值可以是2^52-1。(如果我没有错的话)。

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

共有1个答案

白阳煦
2023-03-14
#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;
}
 类似资料:
  • 问题内容: 我必须将,以s 表示(例如)转换为浮点值( IEEE-754 转换)。我没有使用strconv.ParseFloat函数做到这一点。还有什么我要用的吗?到目前为止我找不到。我也尝试先将其转换为整数,然后转换为浮点数,但结果是错误的。 我最后一次尝试的代码: 问题答案: 首先,需要说明输入的位长。由于十六进制表示形式有4个字节(8个十六进制数字),因此很可能是a (需要询问者澄清)。 您

  • 问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。

  • 问题内容: 这是我正在查看的内容: 因此,我知道不能完全用二进制表示“ p” 1.15的十进制值。 因此,大的十进制大“ bdp”输出对我来说非常有意义……这是浮点数的实际值。 问题1 当浮点数“ p”转换回字符串以进行输出(如1.15)时,如何四舍五入(从内部1.149..375到1.15)? 在文档中的什么地方指定?toString javadoc并没有真正帮助(至少对我来说)。 我在语言规范

  • 我看到的是: 所以我知道“p”1.15的十进制值不能用二进制来精确表示。 所以大的十进制“bdp”输出对我来说非常有意义……这是浮点数的实际值。 问题 1 当浮点数“p”转换回字符串以进行输出(如 1.15)时,该舍入如何/在何处发生(从内部 1.149..375 值转换为 1.15)? 它在文档中的哪个位置指定?托斯特林爪哇并没有真正的帮助(至少我)。 我确实在语言规范中看到了这一点: 浮点和双

  • 问题内容: 我想将二进制数转换为浮点数。这是一种可能性的示例: 给我正确的输出: 不幸的是,我正在使用二进制 字符串 ,即,我需要类似的东西。 但是,这不起作用: 我尝试使用它将带引号的可打印数据块转换回二进制并返回二进制数据。但是最终,我得到了同样的错误: 我了解输出数字是整数的情况,但是如果我想获得数字12.546怎么办?那么该函数对二进制字符串的调用是什么样的? 问题答案: 另一种选择是做

  • 问题内容: 我编写了一个简单的程序,用于在Java中向串行端口发送和接收数据。我通过回送测试(Rx到Tx)连接串行端口设备。它工作正常。但我无法发送和接收十六进制数据到串行端口和接收串行端口。在我的设备中使用了FT232BL芯片,因此是否需要任何dll或其他库来将十六进制数据发送和接收到串行端口设备。我的代码如下。 问题答案: 十六进制: 十六进制为: