C++ float vs double cout setprecision 奇怪之处(新手)
C++ float vs double cout setprecision oddities(newbie)
谁能解释为什么当我使用 setprecision() 时这两个相同值的变量可以输出不同的值?
#include <iostream>
#include <iomanip>
int main()
{
float a=98.765;
double b = 98.765;
//std::cout<<std::setprecision(2)<<a<<std::endl;
std::cout<<std::fixed;
std::cout<<std::setprecision(2)<<a<<std::endl;
std::cout<<std::setprecision(2)<<b<<std::endl;
}
a 的输出将为 98.76,而 b 的输出将为 98.77。
这些变量不具有相同的值。当您将 98.765
的文字 double
硬塞进浮点数时,它必须做到最佳匹配,并且会损失一些精度。
如果将精度更改为 50,您可以很容易地看到这一点,您还会看到即使是双精度也不能准确表示该值:
98.76499938964843750000000000000000000000000000000000
98.76500000000000056843418860808014869689941406250000
不过重要的是前者float
变量会向下取整,后者double
会向上取整
谁能解释为什么当我使用 setprecision() 时这两个相同值的变量可以输出不同的值?
#include <iostream>
#include <iomanip>
int main()
{
float a=98.765;
double b = 98.765;
//std::cout<<std::setprecision(2)<<a<<std::endl;
std::cout<<std::fixed;
std::cout<<std::setprecision(2)<<a<<std::endl;
std::cout<<std::setprecision(2)<<b<<std::endl;
}
a 的输出将为 98.76,而 b 的输出将为 98.77。
这些变量不具有相同的值。当您将 98.765
的文字 double
硬塞进浮点数时,它必须做到最佳匹配,并且会损失一些精度。
如果将精度更改为 50,您可以很容易地看到这一点,您还会看到即使是双精度也不能准确表示该值:
98.76499938964843750000000000000000000000000000000000
98.76500000000000056843418860808014869689941406250000
不过重要的是前者float
变量会向下取整,后者double
会向上取整