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;
}
推荐阅读
- python - 在 Django 表单标签中添加新行(和项目符号)?
- amazon-web-services - 我应如何公开 S3 端点以供客户端加载文件
- python - CS50 DNA 适用于 small.csv 但不适用于大型
- python - Unable to make FuncAnimation work in a Class
- html - 你知道为什么我的动画方法不适用于顶级属性吗?
- c++ - C++ 如果这些函数在构造函数中传递,我如何使用带有自定义哈希和比较的 unordered_map 作为成员变量?
- assembly - 如何在 nasm 汇编程序(x64)中清除/归零变量?
- c# - C# UDPClient 类中的 Recieve 和 BeginRecieve 有什么区别?
- c++ - Nothrow 不工作,即使有正确的标题?(GCC C++)
- cmake - CMake:除了构建目标之外还需要构建文件