C++ 四舍五入至小数点后第二位,除非数字为整c++;

C++ 四舍五入至小数点后第二位,除非数字为整c++;,c++,floating-point,output,rounding,precision,C++,Floating Point,Output,Rounding,Precision,我正在尝试打印Cpp中最多2个小数点的float数值的平均值。avg是float,sum是float,count是int 目前,如果我有10/1,例如,它输出10.00。我希望输出值仅为10。例如,如果avg获取值3.1467665,则应显示为3.14 avg = sum/count; std::cout << std::fixed << std::setprecision(2) << avg; avg=总和/计数; std::cout您可以根据avg值的浮

我正在尝试打印Cpp中最多2个小数点的
float
数值的平均值。
avg
float
sum
float
count
int

目前,如果我有10/1,例如,它输出10.00。我希望输出值仅为10。例如,如果
avg
获取值
3.1467665
,则应显示为
3.14

avg = sum/count;
std::cout << std::fixed << std::setprecision(2) << avg;
avg=总和/计数;

std::cout您可以根据
avg
值的浮动模数选择精度。以下工作:

int main() {
  double sum = 10;
  double count = 3;
  double avg = sum/count;
  double mod;
  std::cout << std::fixed
            << std::setprecision((modf(avg, &mod) != 0.0) ? 2 : 0)
            << avg
            << std::endl;
}
intmain(){
双和=10;
重复计数=3;
双平均值=总和/计数;
双模态;

std::cout您可以根据
avg
值的浮动模数选择精度。以下工作:

int main() {
  double sum = 10;
  double count = 3;
  double avg = sum/count;
  double mod;
  std::cout << std::fixed
            << std::setprecision((modf(avg, &mod) != 0.0) ? 2 : 0)
            << avg
            << std::endl;
}
intmain(){
双和=10;
重复计数=3;
双平均值=总和/计数;
双模态;

std::cout如果有一种方法可以使用旧的标准件(c11之前)重写它,那就太好了。无论如何,我会接受这个答案。非常感谢。你可以用一个简单的整数转换来代替昂贵的
modf
调用,例如
自动精度=(int(avg)!=avg)?…:…;
,根据
avg
支持的值范围选择一个合适的整数类型。当我希望它是27.5时,输出是27.50。有没有办法也这样做?@KarinaK:代码不是特定于C++11的。唯一需要做的更改是拼写出类型,以代替
auto
。至于t在这个问题上,这是不可能的。在这一点上,你应该考虑字符串操作:从2位小数的值构造一个字符串表示;带尾随零点,直到没有任何条带;ed result.@IInspectable,在我的回答中添加了这样一个实现如果有办法用旧的标准件(c11之前)重写它,那就太好了。无论如何,我会接受这个答案。非常感谢。你可以用一个简单的整数转换来代替昂贵的
modf
调用,例如
自动精度=(int(avg)!=avg)?…:…;
,根据
avg
支持的值范围选择一个合适的整数类型。当我希望它是27.5时,输出是27.50。有没有办法也这样做?@KarinaK:代码不是特定于C++11的。唯一需要做的更改是拼写出类型,以代替
auto
。至于t在这个问题上,这是不可能的。在这一点上,你应该考虑字符串操作:从2位小数的值构造一个字符串表示;带尾随零点,直到没有任何条带;ed result.@IInspectable,在我的回答中添加了这样一个实现更新显著地改变了问题。它不再要求“舍入”,而是要求“截断”。当然,这仍然算作舍入(向零或负无穷大),但当人们看到术语“舍入”时,这并不是人们通常所期望的独立地。更正:不是更新改变了问题。截断要求从一开始就存在。建议的答案没有解决这一问题。当与
3.1467665
运行时,它将产生
3.15
。更新显著地改变了问题。它不再要求“舍入”,而是“截断”。当然,这仍然算作四舍五入(向零或负无穷大方向),但这不是人们通常在看到“四舍五入”这个术语时所期望的“孤立地说。更正:并不是更新改变了问题。截断要求从一开始就存在。建议的答案没有解决这一问题。在运行
3.1467665
时,它将生成
3.15