我有以下代码行:
int destHeight = (int)(sourceHeight * percent);
我在一个过程的一部分中使用它,在保持纵横比的同时将图像裁剪为缩略图。
问题概述如下:
percent = 0.08680555
,
sourceHeight = 576
,
计算结果为50.0
,但当destHeight
作为int
分配时,会更改为49
。
我该如何解决这个问题?
答案 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中,整数类型为byte
,short
,int
和long
。)要获得50,必须使用舍入函数。 Java示例:
double percent = 0.08680555;
int sourceHeight = 576;
int destHeight = (int) Math.round(sourceHeight * percent);
System.out.println(destHeight);
50