This question already has answers here:
Closed 12 years ago.
Possible Duplicate:
Why does (360 / 24) / 60 = 0 … in Java
This line of code:
System.out.println ("array[j], "+array[j]+", divided by sum, "+sum+", equals: array[j]/sum: "+ array[j]/sum) ;
is yeilding this line of text:
array[j], 21, divided by sum, 100, equals: array[j]/sum: 0
why is it doing this? (everything is right eccept that the answer should be .21)
Are you sure that your array is not integer ?
if it's, try using double.
I'm assuming that aray is an int[] and sum is an int. In this case, Java will perform integer division, which results in 0 in this case.
Others noted the cause. To fix, (double) aray[j]/sum.
Dividing integers will get you an integer answer rounded down to the first whole number. If you want a decimal result, you have to make it 21.0/100.0.
Related
This question already has answers here:
BigDecimal adding wrong value
(5 answers)
BigDecimal Method returns vague results, why does this happen?
(2 answers)
Closed 3 years ago.
Note this is not a duplicate, I'm and referring to rounding; not adding.
So I am dealing with BigDecimal and everything I do works as planned except for the rounding of certain numbers. It is easier to explain with code, but the rounding changes property between numbers. Note this is a always round down mode (truncating). It should round to 6 numbers in the decimal point.
System.out.println( (new BigDecimal(1.340)).round(new MathContext(7, RoundingMode.DOWN))); //returns 1.400000
System.out.println( (new BigDecimal(2.340)).round(new MathContext(7, RoundingMode.DOWN))); //returns 2.339999
I understand BigDecimal, rounding, etc. What is strange is simply changing the first number from 1 to 2, 3, 4, 5, ... n makes the value n.339999.
In other words, for n.340 where n > 1, rounding in this form gives n.339999 while if n = 1, it yields, 1.400000
What am I doing wrong? How can I fix this problem and make it the 1.400000 version? It is preferable to use this format because everything else I am dealing with (unnecessary to this question) works in this format where it is rounded in this way.
Don't initialize your BigDecimal with a double. You already have a precision problem when you create your BigDecimal. Use a String instead:
System.out.println( (new BigDecimal("1.340")).round(new MathContext(7, RoundingMode.DOWN))); //returns 1.340
System.out.println( (new BigDecimal("2.340")).round(new MathContext(7, RoundingMode.DOWN))); //returns 2.340
This question already has answers here:
How to make the division of 2 ints produce a float instead of another int?
(9 answers)
Closed 7 years ago.
This is my array c:
[-33,-22,-11,-5,-4,-3,-2,-1,6,7,8,9,10,11,44,55,66,77,88]
I was able to find the sum by doing this and it worked:
System.out.println(Arrays.stream(c).sum()));
I tried a similar approach to get the average:
System.out.printf("%.2f",(Arrays.stream(c).sum()/c.length));
I got an IllegalFormatConversionException for that though.
When I manually do the average on a calculator, it should come out to 15.78947...but I only want to round 2 places after the decimal. I have tried other statements but those kept giving be 15 as the average and cutting the decimals off. I need to compute the average within the print statement. How can I do this?
I want my output to look like this: 15.79
double average = Arrays.stream(numbers).average().getAsDouble();
This should do the trick.
Arrays.stream(c).sum()/c.length is integer since both arguments are integer.
So you are trying to format Integer as float.
You need explicitly cast one of arguments to float (or double) to get decimal result.
Something like
Arrays.stream(c).sum()/(double)c.length
This question already has answers here:
Division of integers in Java [duplicate]
(7 answers)
Closed 8 years ago.
It's been a long day for me and I don't know if I can't do second grade math or if I'm doing something wrong in terms of how to do math in java. I'm not new to java, I started about a year and a half ago, but like I said, it's been a long day.
Here is my code:
System.out.println(5 / 150 * 100);
I expect to get something like "3.3333" or at least "3", but I get "0" instead. Why is that and how do I fix it?
Your second grade math is perfectly correct. However, 5 / 150 = 0.03 will become zero because its type is int. Then multiplying 0 with 100 won't change anything.
Use floats or doubles and you'll get the right result. Which of these two you use, depends on your needs. If you need a very precise value (a freaking lot of 3s behind the point) use double because it has - as its name tells you - two times the precision of a float.
All of your operand is int value and it will result in int value.
Try to change your operand to float value.
Try this:
System.out.println(5f / 150 * 100);
System.out.println(5 / 150f * 100);
This question already has answers here:
Why does division result in zero instead of a decimal?
(5 answers)
Closed 8 years ago.
I have hit a snag in my program when this calculates I get result of 0.0
y = 1/6*Math.pow(x,3)+1/2*Math.pow(x,2)-1/3*x;
I have tried writing the equation in chunks so I can add the results up after calculation but the result just keeps ending up being 0.0 and I don't know why. Is this a syntactical error or is there a rule that I'm missing about java?.
When you divide two integers Java truncates the result to an integer. If you want a fractional result you need to use floating point numbers. 1/2 is 0; 1.0/2.0 is 0.5.
y = 1.0/6.0*Math.pow(x,3) + 1.0/2.0*Math.pow(x,2) - 1.0/3.0*x;
y = 1/6*Math.pow(x,3)+1/2*Math.pow(x,2)-1/3*x;
Here you are doing division of two integers, which would result in 0. Make one/both of the values to decimal (1.0/6.0 etc) and then try this. It should give the correct result. The reason is that, 1/6 will be corrected to the closest integer value, which is 0.
This question already has answers here:
Division of integers in Java [duplicate]
(7 answers)
Closed 9 years ago.
I have the following line of code:
System.out.println(5/9);
I expect to see 0.555 as a result, but instead it prints out zero. Can someone help me understand why this happens? I am currently learning programming and appreciate the help.
Thanks!
This happens because what you are unknowingly doing is Integer Division.
To make calculations fast, computer uses Integer division method when there's no decimal number involved, and hence decimal values are lost.
Try this out:
System.out.println(5.0 / 9.0);
or
System.out.println(5.0 / 9);
or
System.out.println(5 / 9.0);
or
System.out.println((float) 5 / 9);
or
System.out.println(5 / (float) 9);
You trying to divide 5 by 9.Both are integers.So the answer is also an integer.So return 0 as answer.So try like System.out.println(5.0/9); or assign values to float variables and go with that
Integer divide by Integer returns Integer
Do like this
System.out.println(5.0/9);
This is an integer division because both operands are of type integer. An integer division gives an integer result obtained by truncation.
When Integer division is ran in Java (Integer / Integer), the number is calculated then rounded down to the while number. Therefore, 5/9 is evaluated as 0.55555 then rounded down to 0.