计算java中的百分比

时间:2014-06-18 06:40:32

标签: java

如果我想在java中计算76/266 = 28.57%,那么最好使用哪种数据类型?

到目前为止,我有:

int x = 76;
int y = 266;
float z = (x * 100) / y;

但是这样做,我得到28.0作为答案。我需要将答案四舍五入到最接近的百分位。感谢。

4 个答案:

答案 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在他的回答中提到的,您可以将变量xy声明为float以避免这些问题。< / p>

修改:要对float结果进行舍入,可以试试这个:

float z = Math.round(result * 100) / 100f;

其中100的零数是小数位数。请注意,由于后缀100ffloat将为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;