c - 如何将 float 分成2或3份

标签 c

所以我刚刚收到了我的论文。它表示如果输入数字是 0.001001001 (重复),它将打印 0.001...,如果是 0.015015015,则打印 0.015。 .. 作为打印,如果数字是 998 它应该是 0.998... 我的想法是将它分成两部分,但我仍然无法弄清楚。谢谢

scanf("%f",&num1);
scanf("%f",&num2);
scanf("%f",&num3);

num1 = floor(1000*(num1/999))/1000;
num2 = floor(1000*(num2/999))/1000;
num3 = floor(1000*(num3/999))/1000;

printf("%.3f...\n",num1);
printf("%.3f...\n",num2);
printf("%.3f...\n",num3);

输入 = 3 个整除 999 的整数,值低于 999

输出=结果,如果结果重复(0.001001001)那么它将打印出0.001...

示例:

输入=输出

3 = 0.003...

10 = 0.010...

998 = 0.998...

注意:我在地板上尝试过,所以我猜我的逻辑有问题

最佳答案

由于该值低于 999,不包括999,因此只需读取整数,然后用0.%03d... 打印它:

int num;

scanf("%d", &num);
printf("0.%03d...\n", num);

转换规范%03d将以10为基数打印给定的整数,前面添加前导零,以便它至少有3个字符宽。对于 3,它将打印 003,对于 10,它将打印 010,对于 976,它将打印 976

您具体不能执行此操作的 float 。计算机中的 float 是二进制数,它们不能精确地生成小数……也不能实现无限精度。

关于c - 如何将 float 分成2或3份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784022/

相关文章:

c++ - 无法将整数写入缓冲区内的偏移量 (char*)

c - 在 free() 之后将指针设置为 NULL 总是一个好习惯吗?

c - 如何在C中设置用户输入字符的时间限制?

c - SIP 客户端不接受响应

c - uint8_t 数组 - 内存中的数据

c++ - 是否验证 116725 = 116 * 725? C/C++

c++ - 为什么循环变量必须并行签名?

C : How to detect if execvp waiting for standard input?

c++ - 将递增/递减运算符放在三元/条件运算符中是否安全?

c - inotify 真的适用于文件还是仅适用于目录?