如何在默认情况下和过量情况下近似一个数字?理解我们所说的,我们有数字 2.534823
小数点后 4 位的默认近似值为2.5348
对于超过 4 位小数的近似值,它将是2.5349
这就像四舍五入但对于特定的小数位,有没有办法在 C++ 中做到这一点?
我有以下示例,但它只会四舍五入到最接近的整数,无论更大或更小:
#include<iostream>
#include<math.h>
using namespace std;
int main(){
float num;
int decim;
cout<<"\tCalcular aproximaciones por defecto y exceso"<<endl<<endl;
cout<<"Ingrese un numero: " ;
cin>>num;
cout<<"Ingresa la cantidad de dedcimales a dejar: ";
cin>>decim;
/*
con ceil y floor me acerca al entero,
ceil al entero más cercano mayor
floor al entero más cercano menor
*/
cout<<"Aproximación por exceso: "<<ceil(num)<<endl;
cout<<"Aproximación por defecto: "<<floor(num)<<endl;
/*
la aproximación debería quedar como:
numero ingresado = 1.432986
para por defecto con 4 decimales, quedaria 1.4329
para exceso con 4 decimales quedaría 1.4323
pero con ceil, subiría a 2
y con floor bajaría a 1
*/
return 0;
}
在C中,您可以在打印时将数字截断到指定的小数位数(即默认近似值):
printf("%.3f", x);
任何一个
printf("%3f", x);
我不记得这两种方法中的哪一种,我想知道的是如何在C++中完成相同的操作,并且还可以通过过量获得近似值
正如我们已经知道的那样,浮点数是不精确的,所以直接使用二进制值会导致......奇怪的结果。
一种可能的解决方案是对已经转换为字符串的值进行近似,尽管这需要我们手动执行某些操作:
我没有彻底测试过;对于测试值(
3.1415f
和9.9999f
)显示如下:注意:将其转换为 相对容易
template< >
,并且为此添加一个额外的参数以便能够使用除句点 (.
) 之外的其他分隔符。使用
std::setprecision
,您的小数点后 3 位为2.535
,小数点后 4 位为2.5348
,此代码:产生以下输出:
你可以看到它在Wandbox上运行。此外,您可以使用 设置浮点数的舍入方式
std::fesetround
,有四种舍入方式:FE_DOWNWARD
: 向负数舍入。FE_TONEAREST
:四舍五入到最接近的可表示值。FE_TOWARDZERO
: 向零舍入。FE_UPWARD
: 朝正方向舍入。通过四舍五入,上述程序:
它显示以下输出: