我无法将GPA翻倍到小数点后两位。 (GPA需要四舍五入:3.67924)我目前正在使用ceil进行整理,但它目前将整数输出(368)
这就是我现在所拥有的
if (cin >> gpa) {
if (gpa >= 0 && gpa <= 5) {
// valid number
gpa = ceil(gpa * 100);
break;
} else {
cout << "Please enter a valid GPA (0.00 - 5.00)" << endl;
cout << "GPA: ";
}
}
使用上面的代码与3.67924将输出368(这是我想要的,但只是没有整数和小数之间的时间段)。我该如何解决这个问题?
答案 0 :(得分:1)
你不能将双打两舍五入到小数点后两位。双打不会 小数位。它们有二进制位置,并且它们与小数位无法相称。
如果你想要小数位,你必须使用十进制基数,例如使用printf格式化输出时(&#34;%。2f&#34;,...)。
答案 1 :(得分:1)
示例:您希望将56.899999999999输出为带小数点后两位的字符串,即56.89。
首先,将它们转换
值= 56.89 * 1000 = 5689
系数= 100
-1个小数点= 10
-2个小数点= 100
-3个小数点= 1000
等等
int integerValue;
int decimal;
std::string result;
function ( int value , int factor)
{
integerValue= (value / factor) * factor; //(5689 / 100) * 100 = 5600
decimal = value - integerValue; // 5689 - 5600;
result = std::to_string((int)(value/factor) + "." + std::to_string(decimal);
// result = "56" + "." + "89"
// lastly, print result
}
不确定这是否有帮助?
答案 2 :(得分:0)
试试这个。但是在else条件下你的cout
语句,所以它不会为3.67924提供所需的输出。
if (cin >> gpa)
{
if (gpa >= 0 && gpa <= 5) {
// valid number
gpa = ceil(gpa * 100);
gpa=gpa/100;
break;
}
else
{
cout << "Please enter a valid GPA (0.00 - 5.00)" << endl;
cout << "GPA: ";
}
}
答案 3 :(得分:0)
如果仅仅是写入屏幕的问题,那么使用
来舍入数字std::cout.precision(3);
std::cout << gpa << std::endl;
浮点数并没有完全表示,所以通过内部舍入值然后在计算中使用它来增加不精确性。
答案 4 :(得分:0)
要四舍五入至小数点后两位小数,可以使用:
#include <iostream>
#include <cmath>
int main() {
double value = 0.123;
value = std::ceil(value * 100.0) / 100.0;
std::cout << value << std::endl; // prints 0.13
return 0;
}
要舍入到小数点后n位,您可以使用:
double round_up(double value, int decimal_places) {
const double multiplier = std::pow(10.0, decimal_places);
return std::ceil(value * multiplier) / multiplier;
}
这种方法并不是特别快,如果性能成为问题,您可能需要其他解决方案。
答案 5 :(得分:0)
当您尝试在变量中存储最多 n 个十进制值时。 您必须将该值与 10^n 相乘,然后将其除以 10^n。 然后在程序中使用类型运算符进行操作。 这是示例:-
float a,b,c,d,sum;
cin>>a>>b>>c>>d; // reading decimal values
sum=(a*b*c*d);
sum=round(sum*100)/100; // here it is for 2 decimal points
if((float)sum < (float) 9.58)
cout<<"YES\n";
else
cout<<"NO\n";
答案 6 :(得分:-1)
std::string precision_2(float number)
{
int decimal_part = (number * 100) - ((int)number * 100);
if (decimal_part > 10) {
return std::to_string((int)number) + "." + std::to_string(decimal_part);
} else {
return std::to_string((int)number) + ".0" + std::to_string(decimal_part);
}
}
所有正浮子的处理都很好。进行较小的修改将使其也适用于-ves。