如何在不使用c ++中的任何API的情况下将字符串(22.123)格式编号转换为浮点变量格式

时间:2010-03-10 07:21:32

标签: c++

如何在不使用c ++中的任何API的情况下将字符串(22.123)格式编号转换为浮点变量格式。这只是为了更多地了解内部编码.. thnx

5 个答案:

答案 0 :(得分:3)

类似的东西:

double string_to_double(std::string s)
{
    int p = 0;
    int p_dec = s.length();

    double val = 0;

    for (int i=0; i<s.length(); ++i)
    {
        double digit = (double)(s[i] - '0');
        if (s[i] == '.') { p_dec = p; }
        else { val += digit*powf(10,p--); }
    }

    val /= powf(10, p_dec);
}

答案 1 :(得分:2)

基本算法,假设1.2e-4形式没有输入:

(1)读取点前的整数。如果位数是> 16(正常精度为double),直接将该整数转换为浮点并返回。

(2)读取最多16位数的整数。计算(整数)÷10 位读。在步骤(1)中用整数求和并返回。

这只涉及2个浮点运算:一个+和一个÷,以及一堆整数算术。乘以10的乘法和除法的优点是误差不会不必要地累积。

(要读取16位整数,需要64位整数。)


实际上,您应该使用sscanf(str, "%lf", ...)std::istringstreamboost::lexical_cast<double>

答案 2 :(得分:0)

通过使用一系列乘法和除以10的幂来逐位数字,并按字符构造字符串。

答案 3 :(得分:0)

如果您只是想知道如何做,另一个答案是,如果您想要一个准确的结果,问题就不那么简单了,您应该参考有关该主题的文献。例如:ftp://ftp.ccs.neu.edu/pub/people/will/howtoread.ps

答案 4 :(得分:0)