Научная запись теряет точность.1.5241E16 просто означает, что ответ примерно равен 1,5241 * 10 000 000 000 000 000, то есть если вы можете решить, сколько десятичных разрядов вы хотите отобразить, вы можете просто разделить свое число на 10 ^ X и объединить результат.
Так что, если мой результатчисло было 1234567890, и я хотел показать это до 3 десятичных знаков.Я бы сделал 1234567890/10 ^ 9 (потому что после первой цифры есть 9 цифр), а затем я бы просто смог все конкатенировать после 5-го символа (1 место для целого числа, 1 место для точки и затем 3 знака после запятой).Если вы хотите округлить последнее десятичное число, просто проверьте, больше ли число в позиции 6 или равно 5 или просто увеличьте последнее число на 1.
Здесь это дает желаемый результат.
double num1 = 123456789L;
double num2 = 123456789L;
String result = num1*num2+"";
if(result.contains("E")){ //if result is in scientific notation
//take the first 6 characters only and part containing the E, drop everything else.
result = result.substring(0, 6) + result.substring(result.indexOf("E"));
}
System.out.println("Result is = " + result);
Вывод из моей оболочки Groovy:
Результат = 1.5241E16