Изучаем Java

Вы здесь: Главная >> Java-учебник >> Числа с плавающей точкой

Обучающие курсы:

Курс обучения профессии "Программист Java"
Nota Bene!!! Обучаем на веб-разработчика!!! Спешите!!!

Числа с плавающей точкой в языке Java


Типы чисел с плавающей точкой

Эти типы предназначены для представления чисел, имеющих дробную часть. В языке Java есть два типа для чисел с плавающей точкой, показанные в табл. 3.2.

Таблица 3.2. Типы для чисел с плавающей точкой

 

Тип

 

Требуемый объем памяти

 

Диапазон (включительно)

 

 

float

 

 

4 байт

 

Приблизительно ±3.40282347E+38F
(6-7 значимых десятичных цифр)

 

 

double

 

8 байт

 

Приблизительно ±3.40282347E+38F
(15 значимых десятичных цифр)

 


Имя double означает, что точность этих чисел вдвое превышает точность чисел типа float (Некоторые называют их числами с двойной точностью.) В большинстве приложений наиболее удобным является тип double. Ограниченной точности чисел типа float во многих случаях просто недостаточно.

Семи значимых (десятичных) цифр, возможно, хватит для того, чтобы точно выразить вашу годовую зарплату в долларах и центах, однако для зарплаты президента вашей компании этого будет явно недостаточно. Единственная причина, по которой тип еще используется, — редкие ситуации, в которых важна скорость обработки чисел (у чисел типа она выше). Кроме того, тип используется при хранении больших массивов действительных чисел.

 

Числа типа float имеют суффикс F, например 3 . 402F. Числа с плавающей точкой, не имеющие суффикса F (например 3.4 02), всегда рассматриваются как числа типа double.

Для их представления можно (но не обязательно) использовать суффикс D, например 3 .
вычисления, производящиеся над числами с плавающей точкой, следуют стандарту IEEE 7 54. В частности, в языке Java есть три специальных числа плавающей точкой:
положительная бесконечность;
отрицательная бесконечность;
NaN (не число).

Они используются для обозначения переполнения и ошибок. Например, результат деления положительного числа на 0 равен положительной бесконечности. Вычисление 0/0 или извлечение квадратного корня из отрицательного числа равно NaN.

В языке Java существуют константы Double. POSITIVE_INFINITY, Double. NEGATIVE_INFINITY и Double .NaN (а также соответствующие константы типа float).

Однако на практике они редко используются. В частности, для того, чтобы убедиться, что некий результат равен константе Double. NaN, нельзя полнить проверку
if (х == Double.NAN) // Тождественно ложное; условие.

Все величины, "не являющиеся числами", считаются разными. Однако можно вызывать метод Double. isNaN:
if (Double.IsNaN(xj) // Проверка, является ли х "не числом".

 

Символьный тип

Во-первых, для обозначения констант типа char используются одиночные кавычки. Например, — это символ. Он отличается от "Н", строки, состоящей из единственного символа.
Во-вторых, тип char обозначает символы, представленные в формате Unicode. Вы можете не знать этот формат и не беспокоиться о нем, если не разрабатываете приложения, в которых нужна поддержка языков, помимо английского.

Поскольку формат Unicode был разработан для обработки практически всех символов всех письменных языков, существующих в мире, он является 2-байтсвым кодом. В нем допускается 65536 символов, из которых обычно используется около 35000. Формат Unicode намного богаче набора ASCII, представляющего собой 1-байтовый код, состоящий из 128 символов, или широко используемого расширения ISO 8859-1, с помощью которого можно закодировать 256 символов.

Этот набор символов (который программисты часто называют множеством символов представляет собой подмножество формата Unicode.
Точнее, эти символы являются первыми 256 кодировки Unicode.

Таким образом, код символов 'а', ' 1', ' [' и 'а' в формате Unicode не превышает 256. Коды символов в формате Unicode лежат в диапазоне от 0 до 65535, однако обычно они выражаются как шестнадцатеричные величины от '\u0000' до 'uFFFF' (в то время
как в формате ISO 8859-1 их диапазон ограничивается числами ' \u0000 ' и ' \uOOFF').

Префикс \и означает, что символ записан в формате Unicode, а следующие за ним четыре шестнадцатеричные цифры задают сам символ. Например, \u2122 — это символ торговой марки. Более подробную информацию о формате Unicode вы можете найти на vveb-странице http : //www.unicode.org.

 

Кроме префикса \u, означающего символ в формате Unicode, в языке Java есть еще несколько специальных символов (escape sequence), показанных в табл. 3.3.

 

Таблица 3.3 Специальные символы.

 

Специальный символ

 

Имя

 

Значение в кодировке Unicode

 

\b

 

Возврат на одну позицию

 

\u0008

 

\t

 

Табуляция

 

\u0009

\п

 

Переход на новую строку

 

\u000а

 

 

\r

 

Возврат каретки

 

\\u000d

 

 

\"

 

Двойная кавычка

 

\u0022

 

 

V

 

Одинарная кавычка

 

\u0027

\\

Обратная косая черта

\u005c

 

 

Теоретически в приложении или апплете на языке Java можно использовать любой символ в формате Unicode, однако будет ли он отображаться на экране дисплея, зависит как от вашего броузера (для апплетов), так и (в конечном счете) от операционной системы (в обоих случаях).
Например, на компьютерах, работающих под управлением американской версии системы Windows, с помощью языка Java невозможно отобразить японские иероглифы. Вопросы, связанные с интернационализацией, рассматриваются в главе 12.

 

Булевский тип

Переменная типа boolean имеет два значения: false и true. Они используются для вычисления логических выражений. Преобразования булевских переменных в целочисленные и наоборот невозможны.

В языке C++ вместо булевских величин можно использовать числа и даже указатели. Значение 0 эквивалентно булевскому значению false, а ненулевые величины — значению true. В языке Java этого нет.

Следовательно, программист на языке Java защищен от недоразумений, связанных с использованием таких выражений:
if (х = 0) // Ой! Вместо проверки х = = = 0 выполнили присваивание!

В языке C++ эта проверка компилируется и выполняется, причем вычисление всегда приводит к результату false.
В языке Java такая проверка приведет к ошибке компиляции, поскольку целочисленное выражение х = 0 нельзя преобразовать в булевское значение.


Партнеры сайта