如何将结果除以第三位后的第三位。
float result = cos(number);请注意,我希望将结果保存到第三位数,没有舍入。不,我不想用.3f打印,我需要把它保存为新的值;
示例:
0.00367 -> 0.003注:在3点后不需要额外的零。
另外,我需要能够得到第三位数。例如,如果它是0.0037212,我想得到3,并使用它作为一个int在某些计算。
发布于 2017-07-12 17:20:42
您可以缩放值,使用trunc将值截断到零,然后缩小:
float result = trunc(cos(number) * 1000) / 1000;请注意,由于浮点数的不精确性质,结果将不是确切的值。
如果您希望专门提取第三个十进制数字,您可以这样做:
int digit = (int)(result * 1000) % 10;这将使数字向上扩展,使所讨论的数字位于小数点的左边,然后提取该数字。
发布于 2017-07-12 17:22:42
你可以用0.001除以它的余数减去它的余数
result -= fmod(result, 0.001);更新:
这个问题是用非常矛盾的要求更新的。如果你有一个精确的0.003数,在它之后会有无穷多的零,这是一个数的数学性质。OTOH,float表示不能保证每个精确的小数位数都会被精确地表示出来。要解决这个问题,您需要放弃使用float类型,转而使用某种不动点表示。
发布于 2017-07-12 20:30:24
使用sprintf()
double /* or float */ val = 0.00385475337;
if (val < 0) exit(EXIT_FAILURE);
if (val >= 1) exit(EXIT_FAILURE);
char tmp[55];
sprintf(tmp, "%.50f", val);
int third_digit = tmp[4] - '0';https://stackoverflow.com/questions/45063993
复制相似问题