首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将浮动结果号保存到第三位,C中不舍入

将浮动结果号保存到第三位,C中不舍入
EN

Stack Overflow用户
提问于 2017-07-12 17:18:51
回答 3查看 870关注 0票数 1

如何将结果除以第三位后的第三位。

代码语言:javascript
复制
float result = cos(number);

请注意,我希望将结果保存到第三位数,没有舍入。不,我不想用.3f打印,我需要把它保存为新的值;

示例:

代码语言:javascript
复制
 0.00367 -> 0.003

注:在3点后不需要额外的零。

另外,我需要能够得到第三位数。例如,如果它是0.0037212,我想得到3,并使用它作为一个int在某些计算。

EN

回答 3

Stack Overflow用户

发布于 2017-07-12 17:20:42

您可以缩放值,使用trunc将值截断到零,然后缩小:

代码语言:javascript
复制
float result = trunc(cos(number) * 1000) / 1000;

请注意,由于浮点数的不精确性质,结果将不是确切的值。

如果您希望专门提取第三个十进制数字,您可以这样做:

代码语言:javascript
复制
int digit = (int)(result * 1000) % 10;

这将使数字向上扩展,使所讨论的数字位于小数点的左边,然后提取该数字。

票数 2
EN

Stack Overflow用户

发布于 2017-07-12 17:22:42

你可以用0.001除以它的余数减去它的余数

代码语言:javascript
复制
result -= fmod(result, 0.001);

演示

更新:

这个问题是用非常矛盾的要求更新的。如果你有一个精确的0.003数,在它之后会有无穷多的零,这是一个数的数学性质。OTOH,float表示不能保证每个精确的小数位数都会被精确地表示出来。要解决这个问题,您需要放弃使用float类型,转而使用某种不动点表示。

票数 1
EN

Stack Overflow用户

发布于 2017-07-12 20:30:24

使用sprintf()

代码语言:javascript
复制
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';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45063993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档