50.0转为int输出49?

时间:2014-02-04 18:05:32

标签: math casting int percentage

我有以下代码行:

int destHeight = (int)(sourceHeight * percent);

我在一个过程的一部分中使用它,在保持纵横比的同时将图像裁剪为缩略图。

问题概述如下:

percent = 0.08680555

sourceHeight = 576

计算结果为50.0,但当destHeight作为int分配时,会更改为49

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

这不是真的50:

double percent = 0.08680555;
int sourceHeight = 576;

System.out.println(sourceHeight * percent);  // e.g. Java
49.9999968

转换为int截断小数部分,留下49。


您可以尝试使用某种round()功能:

double percent = 0.08680555;
int sourceHeight = 576;

System.out.println(Math.round(sourceHeight * percent));
50

答案 1 :(得分:0)

您应该对数字进行四舍五入来解决问题:int destHeight = (int)(sourceHeight * percent + 0.5);

答案 2 :(得分:0)

转换为int将截断。请改用Convert.ToInt32():

int destHeight = Convert.ToInt32(sourceHeight * percent);

答案 3 :(得分:0)

arshajii是正确的。从浮点(例如double)转换为整数时,通常会截断小数。 (在Java中,整数类型为byteshortintlong。)要获得50,必须使用舍入函数。 Java示例:

double percent = 0.08680555;
int sourceHeight = 576;
int destHeight = (int) Math.round(sourceHeight * percent);
System.out.println(destHeight);

50