c - C 程序中的浮点输出不正确

标签 c

这是我的代码

#include <stdio.h>

int main() {
   float percentage;
   int sp;
   int bp;

   percentage = (sp-bp)/bp*100;

   scanf("%d %d", &sp, &bp );
   printf("%.2f%%", percentage);

   return 0;
}

示例输入:

150 85

示例输出:

76.47%

但我的输出是:

-100.00%

有人可以帮我解决这个问题吗?

最佳答案

首先,您应该在使用它们之前阅读这些值:

scanf("%d %d", &sp, &bp);
percentage = ...

其次,这个:

percentage = (sp-bp)/bp*100;

进行整数除法,因此除法的其余部分将被完全丢弃,您最终将得到:

(150 - 85) / 85 == 0
0 * 100 == 0. 

在执行操作之前,您应该将除法的一端转换为float:

percentage = (sp-bp)/(float)bp * 100;
<小时/>

正确代码:

#include <stdio.h>

int main() {
   float percentage;
   int sp;
   int bp;

   scanf("%d %d", &sp, &bp);

   percentage = (sp-bp)/(float)bp * 100;

   printf("%.2f%%", percentage);

   return 0;
}

关于c - C 程序中的浮点输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58160187/

相关文章:

c - 如何将 Go 字符串数组转换为 C 字符串数组?

c - 这段代码如何导致内存对齐的未定义行为?

c - bison/flex 中的多种数据类型

c - 将参数传递给 CreateProcess() 在 C 中不起作用

c - 如何禁用 DST_METRIC_READ_ONLY 内核 3.0.26

C错误: Storage size of ‘lcd’ isn’t known

c - C如何知道函数中二维动态数组的维度?

c - strcat 实现

c - 管理员权限的替代方案 - fopen 不会在 Windows 中创建 C :\temp. txt

c - malloc() 在哪里分配内存?是进程虚拟地址空间的数据段还是堆段?