При создании сценариев JavaScript использует два возможных типа чисел: целые и с плавающей точкой. Целые числа не имеют дробной части и не содержат разделительной точки. Числа с плавающей точкой имеют целую и дробную части, разделенные точкой.
Операции с целыми числами процессор компьютера выполняет значительно быстрее, чем операции с числами, имеющими точку. Это обстоятельство имеет смысл учитывать, когда расчетов много. Например, индексы, длины строк являются целочисленными. Число n, многие числа, полученные с помощью оператора деления, денежные суммы и т. п. являются числами с плавающей точкой.
В JavaScript можно производить операции с числами различных типов. Это очень удобно. Однако при этом следует знать, какого числового типа будет результат. Если результат операции является числом с дробной частью, то он представляется как число с плавающей точкой. Если результат оказался без дробной части, то он приводится к целочисленному типу, а не представляется числом, у которого в дробной части одни нули.
Рассмотрим примеры.
2+5 // 7 – целое число
2+5.5// 7.5 – число с плавающей точкой
2.6+4.4 // 7 – целое число
7.00 // число с плавающей точкой
Числа можно представлять и в так называемой экспоненциальной форме, то есть в формате: число1е число2 или число1Е число2. Такая запись числа означает число
Рассмотрим пример.
1е5 // 100 000
2е6 // 2 000 000
1.5еЗ // 1500
+1.5еЗ // 1500
-1.5еЗ // -1500
Зе-4 // 0.0003
Числа в JavaScript можно представлять в различных системах счисления, то есть в системах с различными основаниями: 10 (десятеричной), 16 (шестнадцатеричной) и 8 (восьмеричной). К десятеричной форме представления чисел мы привыкли, однако следует помнить, что числа в этой форме не должны начинаться с 0, потому что так записываются числа в восьмеричной системе.
Запись числа в шестнадцатеричной форме начинается с префикса 0х (или 0Х), где первый символ ноль, а не буква О, затем следуют символы шестнадцатеричных цифр: 0, 1, 2, ... 9, а, b, с, d, е, f (буквы могут быть в любом регистре). Например, шестнадцатеричное число 0x4af в десятеричном представлении есть 1199.
Запись числа в восьмеричной форме начинается с нуля, за которым следуют цифры от 0 до 7. Например, 027 (в десятеричном представлении — 23). В арифметических выражениях числа могут быть представлены в любой из перечисленных выше систем счисления, однако результат всегда приводится к десятеричной форме.
Рассмотрим пример.
Функция преобразования из десятеричной в шестнадцатеричную форму. Функция в этом примере принимает в качестве параметра десятеричное число и преобразует его в строку, содержащую это же число, но в шестнадцатеричной форме. При этом мы ограничиваемся числами, не превышающими 255 (в этом случае для представления числа потребуется не более двух шестнадцатеричных цифр).
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Числовые объекты</title>
<script language="JavaScript">
function rom16(n10){
a="0123456789abcdef" /*строка, содержащая все шестнадцатитеричные цифры */
if (n10>255) return null
var i=n10%16
var j=(n10-i)/16
rezult="0x"
rezult +=a.charAt(j)
rezult +=a.charAt(i)
return rezult
}
rom16(250)// 0xfa
rom16(30)// 0x1e
rom16(30)+10//0x1e10 – склейка, а не сложение
b=parseInt(rom16(30)) +10//40
document.write(rom16(250)+"<br>"+rom16(30)+"<br>"+rom16(30)+10 +"<br>"+b)
</script>
</head>
<body>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Функцию rom16() можно также создать на основе массивов.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Числовые объекты</title>
<script language="JavaScript">
function rom16(n10){
a=new Array("0","2","3","4","5","6","7","8","9","a","b","c","d","e","f")
if (n10>255) return null
var i=n10%16
var j=(n10-i)/16
rezult="0x"
rezult +=a[j]
rezult +=a[i]
return rezult
}
rom16(250)
rom16(30)
rom16(30)+10
b=parseInt(rom16(30)) +10
document.write(rom16(250)+"<br>"+rom16(30)+"<br>"+rom16(30)+10 +"<br>"+b)
</script>
</head>
<body>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Рассмотрим еще один пример, где функция rom2() в качестве параметра мринимает десятичное число и преобразует его в строку, содержащую это же число, но в двоичной форме. Эта строка состоит из нулей и единиц. Здесь используется рекурсивный вызов функции rom2() самой себя. Обратите внимание, что использование ключевого слова var здесь принципиально важно из-за рекурсии, иначе функция будет работать неправильно.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Числовые объекты</title>
<script language="JavaScript">
function rom2(n10) {
if (n10<2)
return ""+n10 //чтобы результат был строковым
var i=n10%2
var j=(n10-i)/2
return rom2(j)+i
}
document.write(rom2(250)+"<br>"+ rom2(1)+"<br>"+rom2(12))
</script>
</head>
<body>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
Для преобразования строк, содержащих числа, в данные числового типа служат встроенные функции parseInt() и parseFloat(), соответственно для представления в целочисленном виде и в виде числа с плавающей точкой. Их мы уже рассматривали ранее. Здесь следует отметить, что параметрами этих функций могут быть строки, содержащие числа не только в десятеричной, но и в шестнадцатеричнои, и в восьмеричной формах. Для указания основания системы счисления служит второй параметр этих функций.
Рассмотрим пример.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Числовые объекты</title>
<script language="JavaScript">
parseInt("ff",16) //значение равно 255
parseInt("ff") //значение равно NaN
parseInt("010")//значение равно 8
parseInt("010",8) //значение равно 8
parseInt("010",10)//значение равно 10
parseInt("010",2)//значение равно 2
parseInt("010",16)//значение равно 16
parseFloat(""+25.78)//значение равно 25.78
parseFloat(""+2.5e3)//значение равно 2500
document.write(parseInt("ff",16)+"<br>"+parseInt("ff")+
"<br>"+parseInt("010")+"<br>"+parseInt("010",8)+"<br>"
+parseInt("010",10)+"<br>"+parseInt("010",2)+"<br>"+parseInt("010",16)+
"<br>"+ parseFloat(""+25.78)+"<br>"+ parseFloat(""+2.5e3) )
</script>
</head>
<body>
</body>
</html>
Внимание! Функция parseFloat() в IE6.0 работает неправильно, если указан второй параметр (основание системы счисления).
Для преобразования числа в строку, содержащую это число, достаточно использовать выражение сложения пустой строки с числом.
"" + 25.78 // значение равно "25.78"
"" + 2.5еЗ // значение равно "2500"
В окне веб-браузера это будет выглядеть ТАК.