如果我想在java中计算76/266 = 28.57%,那么最好使用哪种数据类型?
到目前为止,我有:
int x = 76;
int y = 266;
float z = (x * 100) / y;
但是这样做,我得到28.0作为答案。我需要将答案四舍五入到最接近的百分位。感谢。
答案 0 :(得分:6)
在Java和其他一些编程语言中,有一种称为整数算术的东西,如果你这样做(在你的情况下):
int / int = int
在你的代码中,你正在做
(int * int) / int <=> int / int = int
方法1:您可以采取的方法是使用float
操作数。在您的情况下,它可以是100
:
float z = (x * 100.0f) / y;
这里的操作是
(int * float) / int <=> float / int = float
方法2:解决此问题的另一种方法是将整数转换为浮点数:
float z = (x * 100) / (float)y; // int * int / float = float
float z = (float)x * 100 / y; // float * int / int = float
方法3:正如@webSpider在他的回答中提到的,您可以将变量x
和y
声明为float
以避免这些问题。< / p>
修改:要对float
结果进行舍入,可以试试这个:
float z = Math.round(result * 100) / 100f;
其中100
的零数是小数位数。请注意,由于后缀100f
,float
将为f
。
答案 1 :(得分:3)
float x = 76;
float y = 266;
float z = x * 100 / y;
//=28.571428
如果要围绕它,请使用:
double x = 76;
double y = 266;
double z = Math.round(x * 100 / y* 100.0) / 100.0;
//=28.57
顺便说一下,如你所见,你的计算中不需要括号,有一个operator precedence ......
答案 2 :(得分:2)
也许您可以使用java.math.BigDecimal进行计算。我相信这是Java中最高精度的数据类型
BigDecimal d1 = new BigDecimal(67.67);
BigDecimal d2 = new BigDecimal(67.68);
BidDecimal d3 = d1.divide(d2); // d1 + d2 is invalid
答案 3 :(得分:0)
您在代码中所做的是,
将整数x乘以100,然后将结果除以整数y。所以他们的输出只是整数。
然后将这个int结果存储在float变量中。因此,它只会为您的结果添加.0
。
要获得您想要的结果,您可以执行以下任何操作,
1. int x = 76;
int y = 266;
float z = (x * 100.0f) / y;
Note do not write 100.0 because it will be treated as a double number so you will get loss of precision error
2. float x = 76;
int y = 266;
float z = (x * 100) / y;
3. float x = 76;
float y = 266;
float z = (x * 100) / y;