如何在双精度小数点右侧使用数字?

时间:2014-04-05 16:10:50

标签: c

如果已经提出这个问题,我很抱歉(我假设这是一个相当简单的问题而不是因为我没有尝试先找到它!)。

我想要做的是一次建立一个双号头字符。 行num = num * 10 + (c - '0');

/*num being the number built so far and c being the char added*/左侧的数字很简单

但后来做了类似

num = (double)((int)num) + ( (num%1)*10 + (c - '0') )/decDigits; //decDigits is the number of digits(including the new one) to the right of the decimal point的事情

不会起作用,因为显然你不能在双倍上使用%运算符。

什么是实现上述目标的正确方法?

2 个答案:

答案 0 :(得分:1)

您是尝试将double转换为字符串,还是将字符串转换为double?它看起来像后者,我认为在这种情况下你根本不应该使用%运算符。从0.1开始,将每个数字的值乘以适合其位置的值。

但在C中解释更容易:

char c;
double result = 0.0;

/* The part before the decimal place */
while ((c = *s++) && c != '.') {
    result = result * 10.0 + (c - '0');
}

/* The part after the decimal place */
if (c == '.') {
    double m = 0.1;
    s++;

    while ((c = *s++)) {
        result += m * (c - '0');
        m *= 0.1;
    }
}

答案 1 :(得分:0)

未为浮点定义模运算符。如果您尝试使用num%1提取num的小数部分,则应尝试使用以下内容:

double num_dec = num - floor(num);