舍入小数到2位数c ++之间的逻辑

时间:2013-08-19 14:19:52

标签: c++ decimal

我最近看到以下一段代码显示2位十进制数字。

val = ((int)(val*100.0))/100.0

结果如说,但我没有得到它运作背后的逻辑。任何人都可以解释。 谢谢。

2 个答案:

答案 0 :(得分:3)

如果实际代码看起来像这样:

float val = 3.141592654;
val = ((int)(val * 100.0)) / 100.0; // result would be 3.14

然后它背后的逻辑是转换为整数会截断小数。因此,乘以10 ^ n(其中n是小数中所需的位数),然后将其转换为将小数移动到右侧n位置,然后删除剩余的小数。然后,将它转换回浮点并除以10 ^ n以获得所需的结果。

答案 1 :(得分:1)

我认为你缺少代码的一些基本细节 - 我不认为你显示的代码会做任何事情,特别是不能舍入。似乎这段代码试图在第二个数字之后截断所有内容。

假设它是一个float数据类型,您正在寻找以下内容(用于截断)。 我把它分开了(更简单):

float val = 42.1234;
int helpVal = val *100;       //produces 4212, the rest will simply be cut off
float roundedVal = helpVal/100.0;  //produces 42.12

为了缩短它,您还可以使用:

float val = 42.1234;
float roundedVal = ((int) (val*100))/100.0;