如何截断而不是舍入?C

如何截断而不是舍入?C,c,truncate,floating,C,Truncate,Floating,我有一个返回浮点数的程序。我需要返回小数点后两位数字的答案,并截断多余的数字,而不是四舍五入。有人能给我举个例子吗?有一个特殊的截断函数:trunc(…)它会丢弃小数点后的所有内容 如果要在一定数量的十进制数字后截断,可以执行以下操作: trunc(number * 100) / 100 上面这一行的工作原理应该很明显。有一个特殊的截断函数:trunc(…)它会丢弃小数点后的所有内容 如果要在一定数量的十进制数字后截断,可以执行以下操作: trunc(number * 100) / 100

我有一个返回浮点数的程序。我需要返回小数点后两位数字的答案,并截断多余的数字,而不是四舍五入。有人能给我举个例子吗?

有一个特殊的截断函数:
trunc(…)
它会丢弃小数点后的所有内容

如果要在一定数量的十进制数字后截断,可以执行以下操作:

trunc(number * 100) / 100

上面这一行的工作原理应该很明显。

有一个特殊的截断函数:
trunc(…)
它会丢弃小数点后的所有内容

如果要在一定数量的十进制数字后截断,可以执行以下操作:

trunc(number * 100) / 100

在C语言中,当你把一个浮点数转换成一个整数时,小数部分就被丢弃了。所以要截断到小数点后两位,可以乘以100,转换为int,再除以100。(但请看下一条评论)注意,在当今绝大多数计算机中,没有一个数字的小数点后正好有两个(十进制)小数位数。即使你认为你已经转换到了准确的,比如说,1.23,在内部它可能是1.2299999或1.23000001。因此,您可能必须在打印输出时对这些数字进行四舍五入,例如使用
printf%.2f
。在C中,当您将浮点数转换为int时,小数部分将被丢弃。所以要截断到小数点后两位,可以乘以100,转换为int,再除以100。(但请看下一条评论)注意,在当今绝大多数计算机中,没有一个数字的小数点后正好有两个(十进制)小数位数。即使你认为你已经转换到了准确的,比如说,1.23,在内部它可能是1.2299999或1.23000001。因此,您可能必须在打印输出时对这些数字进行四舍五入,例如使用
printf%.2f
.ty good先生。这正是我所需要的。这种方法适用于许多情况。在典型OP关注点之外的情况下,它确实存在问题:1)数值接近1/100的倍数,因为
number*100
引入了额外的舍入。2) 使用
| number |>DBL_MAX/100溢出
。3) 特殊值,如
-0.0,INF
@chux,我同意。你知道更好的方法吗?“
number*100
的主要问题引入了一个额外的舍入。”似乎只有以某种方式使用扩展精度才能解决。我看不到“截断四舍五入到2位数”和“四舍五入”之类的用法。了解OP的用例会有所帮助。我认为强有力的答案是一个具有挑战性的问题。
| number |>DBL_MAX/100
很容易通过比较或
int伪码来解决;if(modf(number,&dummy)==0)返回编号不必为整数操心。太好了,先生。这正是我所需要的。这种方法适用于许多情况。在典型OP关注点之外的情况下,它确实存在问题:1)数值接近1/100的倍数,因为
number*100
引入了额外的舍入。2) 使用
| number |>DBL_MAX/100溢出
。3) 特殊值,如
-0.0,INF
@chux,我同意。你知道更好的方法吗?“
number*100
的主要问题引入了一个额外的舍入。”似乎只有以某种方式使用扩展精度才能解决。我看不到“截断四舍五入到2位数”和“四舍五入”之类的用法。了解OP的用例会有所帮助。我认为强有力的答案是一个具有挑战性的问题。
| number |>DBL_MAX/100
很容易通过比较或
int伪码来解决;if(modf(number,&dummy)==0)返回编号以避免使用整数。