I am building a basic calculator functionality in android.
But I am facing little problem with rounding up the numbers when the result is get displayed in the TextView.
I am doing multiplication of 123456789 * 123456789 and getting result which I am not able to accommodate in my TextView.
Also the Actual result of above operation is 1.5241E16 when performed in Android’s in built Calculator.
Can anyone tell me that how can I achieve this result in my calculator app?
Below is little snippet about what I am trying to do:
public static double round(double unrounded, int precision, int roundingMode)
{
BigDecimal bd = new BigDecimal(unrounded);
BigDecimal rounded = bd.setScale(precision, roundingMode);
return rounded.doubleValue();
}
num = num * Double.parseDouble(txtCalc.getText().toString());
num = round(num, 3, BigDecimal.ROUND_HALF_UP); //where 3 is the precision of number
Plz Help me to achieve the result 1.5241E16 for 1…9 * 1….9
The scientific notation does lose accuracy. 1.5241E16 simply means the answer is roughly 1.5241*10,000,000,000,000,000 meaning if you can decide how many decimal places you want to display, you can just divide you number by 10^X and concatenate the result.
So if my resulting number was 1234567890 and I wanted to display this to 3 decimal places. I would do 1234567890 / 10^9 (because there are 9 digits after the first digit) and then I would simply cancatenate everything after char 5 (1 place for the whole number, 1 place for the dot and then 3 decimal places). If you want to round the last decimal place, simply check if the number at position 6 is greater than or eqaul to 5 and just increment the last number by 1.
Here this gives the result you desire.
The output from my Groovy shell: