当前位置: 首页 > 知识库问答 >
问题:

C中的四舍五入正数半至小数点后2位

陶和歌
2023-03-14

通常,四舍五入到小数点后2位是非常容易的

printf("%.2lf",<variable>);

但是,舍入系统通常会舍入到最近的偶数。例如,

2.554 -> 2.55
2.555 -> 2.56
2.565 -> 2.56
2.566 -> 2.57

我想实现的是

2.555 -> 2.56
2.565 -> 2.57
int a = (int)(b+0.5)

所以,我在问如何做与上面相同的事情,在正数上有2个小数点位,而不是整数,以实现我前面所说的打印。

共有1个答案

邵飞鸿
2023-03-14

不清楚你实际上是想“四舍五入”,还是更确切地说是“离零四舍五入”,这需要对负值进行不同的处理。

单精度二进制float至少精确到小数点后6位,double精确到20位,因此通过DBL_EPSILON(在float.h中定义)轻推FP值将导致printf(“%.2lf”,x)对n.nn5值进行四舍五入到下一个100位。不影响不是n的值的显示值。nn5

double x2  = x * (1 + DBL_EPSILON) ; // round half-away from zero
printf( "%.2lf", x2 ) ;

对于不同的舍入行为:

double x2  = x * (1 - DBL_EPSILON) ;  // round half-toward zero
double x2  = x + DBL_EPSILON ;        // round half-up
double x2  = x - DBL_EPSILON ;        // round half-down
 类似资料:
  • 获取以下数字集--> 当相加时,这些给出一个整数。

  • 我最多取小数点后2位四舍五入,但只限于必要时。 输入: 输出: 我如何在JavaScript中做到这一点?

  • 我想把一个数字四舍五入到小数点后2位,但也保留后面的2个零,例如425.1382到425.1400,我在下面的例子中尝试过,但它似乎不起作用 或

  • 因此,为了保持精度,我必须将double转换为字符串,然后调用convert.todecimal(String): 这个方法是有效的,但是我想避免使用字符串变量来将Double转换为Decimal,而不是在15位数后取整?

  • 我对java相当陌生,我必须创建这个程序,我不知道从哪里开始。有人能帮我做什么,以及如何写代码开始吗? 编写一个模拟收银机的程序。提示用户输入三件商品的价格。将它们相加以获得小计。确定小计的税额(6%)。查找销售小计加税额的总额。显示每件商品的价格、小计金额、税额和最终金额。 到目前为止,我有这个: 输出(如果价格为price1=1.65,price2=2.82和price3=9.08美元)如下所

  • 我如何四舍五入到两个小数位?