假设你有一个功能:
string function(){
double f = 2.48452
double g = 2
double h = 5482.48552
double i = -78.00
double j = 2.10
return x; // ***
}
x的* 我们插入:
if we will insert f, function returns: 2.48
if we will insert g, function returns: 2
if we will insert h, function returns: 5482.49
if we will insert i, function returns:-78
if we will insert j, function returns: 2.1
它们只是示例,它展示了funcion()的工作原理。准确地说: double k返回的函数将其四舍五入为:k.XX, 但对于: K = 2.20 它返回2.2作为字符串。 它是如何实现的?
答案 0 :(得分:4)
1)仅仅因为你看到两个数字,这并不意味着基础值必须舍入到两位数。
VALUE 的精确度和 FORMATTED OUTPUT 中显示的位数是两个完全不同的东西。
2)如果您正在使用cout,则可以使用“setprecision()”控制格式:
http://www.cplusplus.com/reference/iomanip/setprecision/
示例(来自上面的链接):
// setprecision example
#include <iostream> // std::cout, std::fixed
#include <iomanip> // std::setprecision
int main () {
double f =3.14159;
std::cout << std::setprecision(5) << f << '\n';
std::cout << std::setprecision(9) << f << '\n';
std::cout << std::fixed;
std::cout << std::setprecision(5) << f << '\n';
std::cout << std::setprecision(9) << f << '\n';
return 0;
}
示例输出:
3.1416
3.14159
3.14159
3.141590000
答案 1 :(得分:2)
数学上,2.2
与2.20
,2.200
,2.2000
完全相同,依此类推。如果您想要查看更多无关紧要的零,请使用[setprecision][1]
:
cout << fixed << setprecision(2);
cout << 2.2 << endl; // Prints 2.20
答案 2 :(得分:0)
要显示最多2个小数位,但不显示尾随零,您可以执行以下操作:
std::string function(double value)
{
// get fractional part
double fracpart = value - static_cast<long>(value);
// compute fractional part rounded to 2 decimal places as an int
int decimal = static_cast<int>(100*fabs(fracpart) + 0.5);
if (decimal >= 100) decimal -= 100;
// adjust precision based on the number of trailing zeros
int precision = 2; // default 2 digits precision
if (0 == decimal) precision = 0; // 2 trailing zeros, don't show decimals
else if (0 == (decimal % 10)) precision = 1; // 1 trailing zero, keep 1 decimal place
// convert value to string
std::stringstream str;
str << std::fixed << std::setprecision(precision) << value;
return str.str();
}