0

我最近遇到了以下一段代码来显示 2 个十进制数字。

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

结果如前所述,但我不明白其运作背后的逻辑。谁能解释一下。谢谢你。

4

2 回答 2

3

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

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

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

于 2013-08-19T14:31:18.637 回答
1

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

假设它是一个浮点数据类型,以下是您正在寻找的(用于截断)。为了(更多)简单起见,我将其拆分:

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;
于 2013-08-19T14:29:46.550 回答