我最近看到以下一段代码显示2位十进制数字。
val = ((int)(val*100.0))/100.0
结果如说,但我没有得到它运作背后的逻辑。任何人都可以解释。 谢谢。
答案 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;