C++数字未正确舍入
C++ numbers aren't rounding correctly
我是Stack Overflow和一般编程的新手。我正在上几节编程C++课,遇到了一个我有点麻烦的作业。该程序应该采用华氏度并将其转换为摄氏度。我看过其他程序,但找不到我的特定问题的重复项。这是我的代码。
#include <iostream>
using namespace std;
int main()
{
int fahrenheit;
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit;
int celsius = 5.0 / 9 * (fahrenheit - 32.0);
cout << "Celsius: " << celsius << endl;
return 0;
}
因此,这在运行的 5 个测试中的 4 个上运行良好。它将 22.22 四舍五入到 22 和 4.44 到 4,但是当输入 0 F 时,它将 -17.77 四舍五入到 -17 而不是 -18。我已经研究了大约一个小时,希望得到一些帮助!谢谢。
使用 std::round()
而不是依赖于从 double
到 int
的隐式转换。要么,要么根本不使用转换,将温度显示为double
.
编辑:正如其他人已经指出的那样,隐式转换不会四舍五入,而是截断数字(只需切断小数点后的所有内容)。
整数隐
式向下舍入,转换为整数类型也是如此。
最有可能的是,使用 float
代替 int
会给出最理智的结果:
#include <iostream>
using namespace std;
int main()
{
int fahrenheit;
cout << "Please enter Fahrenheit degrees: ";
cin >> fahrenheit;
float celsius = 5.0 / 9 * (fahrenheit - 32.0);
cout << "Celsius: " << celsius << endl;
return 0;
}
要获得外观正常的输出(定点如"14.25",使用 e 表示法不科学),请在打印浮点之前将std::fixed
传递给 cout。您还可以使用 cout.precision()
来设置要在输出中的位数。
如果出于其他原因需要 int,请在表达式的右侧使用 std::round()
。
当编译器将浮点数转换为整数时,它不会舍入,而是修剪。 即它只是削减小数点后的数字。因此,您的程序的行为与编程一样。
int x = 3.99;
int y = std::round(3.99);
std::cout
<< "x = " << x << std::endl
<< "y = " << y << std::endl
;
-->
x = 3
y = 4
C/C++ 在将浮点数static_cast<int>
-ing 为 int 时不进行浮点圆。如果要舍入,需要调用库函数std::round()
相关文章:
- C++将浮点指针值舍入为小数位数
- Boost::posix_time::ptime舍入到给定的分钟数
- 浮点定向舍入和优化
- 为什么输出精度没有正确舍入?
- 使用设置精度时如何阻止数字向上舍入?
- 如何在使用 MPFR 时在提升多精度中设置舍入模式
- OpenCV 细分一致的 Rect2f 到 Rect2i 舍入
- C++ 中的舍入函数
- 在特征中将低于特定阈值的数字舍入为零
- istringstream对长数字进行舍入-如何防止这种情况发生
- 如何将数字向上舍入到下一个整数
- C++和往返数字中的舍入
- C++舍入数字,不带上限或下限
- C++数字未正确舍入
- 使用 4/5 舍入规则对数字进行舍入
- 当数字变小的时候,long会加倍舍入吗
- 误差C++舍入数字 - 表达式必须具有整数或枚举类型
- 用两个小数求3个数字的平均值(不舍入!)
- 在c++中,如何使用iostream和iomanip在不显示数字的情况下进行舍入?
- 将任意长度的浮点值舍入为n位数字