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