0
public class Main {
    public static void main (String [] args) {
       int big = 1234567890;
     System.out.println(gerDifference(int big))
  }
    public static int getDifference (int big) {
       float approx = big; //approx: 1.23456794E9.  big:1234567890
       return big - (int)approx;
  }
}
Kromster
  • 13,809
Pavel B.
  • 11
  • 1
  • 3
    Это одно и то же число, просто представленное в экспоненциальной форме. Вы можете управлять видом вывода с помощью функций форматирования – MBo Nov 09 '22 at 08:41
  • 2
    Код не компилируется, если что. – Nowhere Man Nov 09 '22 at 08:49
  • Да уж, в коде как минимум две грубых ошибки. Но в остальном причины две: 1) Для float стандартная нотация научная, это вопрос представления, 2) Типа float недостаточно для представления чисел с такой точностью – CrazyElf Nov 09 '22 at 08:59
  • Не нужно минусовать вопрос. Не помню, чтобы в большинстве книг объяснялись такие тонкости. – rotabor Nov 09 '22 at 11:46
  • Большое спасибо всем за ответы! предварительно пытался найти ответы на основных русскоязычных ресурсах по java, но там такие тонкости не прописаны - просто общее объяснение преобразования примитивов.... – Pavel B. Nov 09 '22 at 12:36
  • @aleksandrbarakin Но тут же не только про экспоненциальную форму, но и про пропадание значащих цифр. Так то я бы тоже согласился с дубликатом, но. – CrazyElf Nov 09 '22 at 12:39
  • @CrazyElf, да, возможно, классический вопрос https://ru.stackoverflow.com/q/417453/178576 тоже стоит привязать как дубликат. – aleksandr barakin Nov 09 '22 at 13:08
  • @aleksandrbarakin Я проголосовал, но не помню можем ли мы два дубля привязать или это только модератор умеет. Посмотрим, как закроется дублем ) – CrazyElf Nov 09 '22 at 13:29
  • @CrazyElf, тысячник тоже может редактировать список дубликатов. – aleksandr barakin Nov 09 '22 at 13:36

1 Answers1

0

Здесь есть два момента:

  1. Целое число при преобразовании в вещественное одинарной точности теряет значащие цифры - потому что для хранения мантиссы (цифр) вещественного одинарной точности отводится меньше разрядов (24), чем у целого 32-битового.
  2. Вещественное число выводится на экран в экспоненциальной форме - потому что так принято по-умолчанию для чисел, у которых 7 значащих цифр (для одинарной точности) не рядом с десятичной точкой (от Х,ХХХХХХ (тут точно не уверен) до ХХХХХХХ).
rotabor
  • 4,251