Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用双精度小数点右边的数字?_C - Fatal编程技术网

C 如何使用双精度小数点右边的数字?

C 如何使用双精度小数点右边的数字?,c,C,如果这个问题已经被问到了,我表示歉意(我假设这是一个相当简单的问题,而不是因为我没有先找到它!)。 我试图做的是一次构建一个双数字1字符。 左边的数字用num=num*10+(c-'0')行表示很简单/*num是迄今为止构建的数字,c是添加的字符*/ 然后做一些类似于num=(double)((int)num)+((num%1)*10+(c-'0'))/decdights的事情//decDigits是小数点右侧的位数(包括新位数) 不起作用,因为显然你不能在双精度上使用%运算符。 实现上

如果这个问题已经被问到了,我表示歉意(我假设这是一个相当简单的问题,而不是因为我没有先找到它!)。 我试图做的是一次构建一个双数字1字符。 左边的数字用
num=num*10+(c-'0')行表示很简单
/*num是迄今为止构建的数字,c是添加的字符*/
然后做一些类似于
num=(double)((int)num)+((num%1)*10+(c-'0'))/decdights的事情//decDigits是小数点右侧的位数(包括新位数)
不起作用,因为显然你不能在双精度上使用%运算符。
实现上述目标的正确方法是什么?

您是在尝试将double转换为string,还是将string转换为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;
    }
}

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

double num_dec = num - floor(num);

这是一个XY问题()吗?你看过strtod()吗?嗯,我不熟悉那一个,我得查一下。我不认为这是一个XY问题,因为答案中给出的方法基本上就是我想做的纠正(如果我至少正确理解XY的话)是的,我试图将字符串转换为双精度:)我逐字符执行的原因是我无法在这个任务中分配任何内存。你的回答确实起到了作用,所以tyvm!