Для преобразования целого числа [1..100] в целое число [1..10] надо
( value * 10 / 100 )
, причём сначала умножить, чтобы точность не потерять. Это известная целочисленная арифметика.Но в целочисленной арифметике есть проблема переполнения, с которой и столкнулись люди на чрезвычайно длинных файлах. Например, если миллион умножить на две тысячи, то получим
2 000 000 000
, а если на три, то получим -1 294 967 296
.
Вот этой фразы
ОтветитьУдалить> Для преобразования целого числа [1..100] в целое число [1..10] надо ( value * 10 / 100 ), причём сначала умножить, чтобы точность не потерять
я, честно говоря, не понял.
Ну... есть числа из одного диапазона (значение позиции скроллбара в условных единицах), которые нужно преобразовать к другому диапазону (пиксели). Если поделить 44 на 100, а потом умножить на 10, то получишь 0, а не 4.
УдалитьА что сразу на 10 не поделить?
УдалитьДесяти нет. Ложки нет :)
ОтветитьУдалитьЕсть первый диапазон и второй. И числа могут быть разные, не делящиеся друг на друга.
А, ок. Туплю после отпуска :)
УдалитьВообще, это стандартная задача нормализации числа - не только целого - в машинной арифметике. Помнится, на моей 42-й кафедре очень любили задачки на эту тему. Javа не умеет сообщать, что случилось overflow (или underflow)? Так-то это вполне машинно-зависимый код, но в принципе несложно обойти и так.
Вот тебе в тему: https://twitter.com/chvest/status/744129999934996480
УдалитьНе. Java кладёт на переполнение
Удалить