Преобразования типа Очень часто возникает необходимость, преобразовывать один числовой тип в другой. Тут на диаграмме показаны разрешенные преобразования, при которых компилятор не выдает ошибки, и проводит их без всяких вопросов. Это преобразование из байта в short, из short в integer, и из integer в long, а также из char в integer, происходит без всяких потерь, так же, как преобразование из числового типа float в double, а также из integer в double. А вот преобразование из long в double, из integer в float, а также из long в float, может происходить с потерей точности. Например, создадим целочисленную переменную типа int nl, которое у нас будет равняться 123456789.
При преобразовании его к типу float, пусть это будет fl, равняется n 1, как раз и будет происходить потеря точности. Посмотрим, как это происходит. Для этого скопируем вот этот вывод на консоль. Правая кнопка мыши, Сору, далее вставим сюда, правая кнопка мыши, Paste.Выведем nl и fl на печать. Для этого напишем, таким образом, nl равняется, nl. И далее выведем fl. Закрыть скобку. Точка с запятой. Попробуем это скомпилировать. Для этого Tools, далее Compile Java, далее Tools и Run Java application. И можно видеть результат, который мы получили: nl, это точное значение, как мы задавали l23456789. А fl у нас даже, если учесть, что у нас l0 в восьмой степени, тем не менее, как мы видим, 567, а затем, вместо 89 у нас 92, произошла некоторая потеря точности. Закроем теперь это консольное приложение.
И учтем еще, что при выполнении какого-либо бинарного оператора (сложения, вычитания, умножения и т.д.) перед выполнением операции оба оператора, которые стоят по разные стороны от знаков сложения, вычитания и т.д., преобразовываются в числа, которые имеют одинаковый тип. И происходит это по следующему законам. Если, хотя бы один из них, или тип double двойной точностью, то второй тоже преобразовывается к такому же типу. Если же этого нет, и один из операторов имеет тип float, действительный, тогда второй же преобразовывается к этому же типу. Если же оба числа целые, и один из оперантов имеет тип long, тогда второй тоже преобразовывается к типу длинного целого, к типу long.
Ну и, в сущности, если оба операнда не являются не действительными, и не длинными целыми, тогда оба операнда преобразуются к типу integer (int). Очень часто, при написании программ, нам требует и обратная операция. Т.е. преобразование, например, от действительного числа к целому. Такие преобразования на языке Java возможны, однако, конечно же, может происходить потеря точности. Эти преобразования называются примитивного типа и синтаксически это должно выглядеть, как пара скобок, внутри которых указывается желательный тип, а затем само имя переменной.
Например, если мы хотим произвести обратное преобразование вот этой переменной f1, которая у нас является типа float к целому, мы можем написать таким образом: int и далее пусть это будет n2, равняется. Далее в скобках мы должны указать непосредственно, какой тип преобразования нам нужен. Нам нужен тип Int. Преобразование к типу Int, целому и далее саму переменную. Это переменная f1. Выведем теперь это число тоже. Для этого воспользуемся опять буфером обмена.
Щелкнем на правую кнопку мыши, Paste и далее напишем, таким образом, n2, равняется, и само значение n2. Закрыть скобку. Точка с запятой. Скомпилируем: Tools, далее Compile Java и теперь выполним: Tools и Run Java application. Вот можно увидеть, что у нас при этом получилось. Значение n2, это 1234567, а далее у нас уже 2 цифры отличные. Вместо 89 - 92, что в принципе соответствует вот этому действительному числу f1. Закроем это окно.Напишем еще один пример такого рода. Например, возьмем действительное число типа double. Пусть это будет, например, z1, которое будет равняться 2 целое 7 десятых, точка с запятой.
Далее возьмем преобразование типа к типу integer. Пусть это будет i1, которое будет равняться преобразованию типа integer и далее эта наша переменная z1. Точка с запятой. И в этом случае у нас к переменной i и й, у нас будет присвоено значение 2, которое получается из 2,7 отбрасыванием дробной части. Ну, конечно же, нас больше бы устроило преобразование типа, при котором мы округляем число z1 до ближайшего целого. Это можно сделать немножко по-другому. Для этого введем еще одну целую переменную. Пусть это будет ii2, равняется. Далее преобразование к типу целого int, и далее воспользуемся функцией math.Далее Round, округление, которое как раз и даст нам округление z1 до ближайшего целого. Вот в этом случае мы уже получим число 3. Проверим это, выведем все это на окно консоли. Для этого щелкнем на правую кнопку мыши и Paste. Далее ii2 равняется, +и.2, далее ++ и внутри в кавычках напишем и1. Кавычки и значение и1.Закрыть скобку. Точка с запятой. После ii1 лучше еще написать знак равенства и далее скомпилируем эту программу. Tools, Compile java, далее Tools, Run Java Application, запуск программы. И можно увидеть, что как мы и ожидали у ii2 значение 3, которое получится округлением из 102, 7, а у переменной ii1 получило значение 2, которое получается отбрасыванием дробной части. Закроем консольное окно и вернемся в наше обычное окно редактирования.
⇐Битовые операции. математические функции | TeachPro WEB-дизайн | Строки: создание, слияние, выделение подстроки, длина⇒