Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Системы счисления (https://javascript.ru/forum/misc/27184-sistemy-schisleniya.html)

Agness 04.04.2012 21:46

Системы счисления
 
Преобразование представления числа в заданную систему счисления. В первом текстовом поле вводится целое десятичное число. При нажатии одной из кнопок: "Hex", "Oct" или "Bin" число переводится соответственно в шестнадцатеричное, восьмеричное или двоичное представление и результат выводится во втором текстовом поле. Если введенный операнд не является целым десятичным числом, во втором текстовом поле выводится сообщение "Ошибка".

Раед 04.04.2012 23:04

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<script>
window.onload = function() {
 document.MMM = document.getElementsByName('MMM')[0];
 document.MMM2 = document.getElementsByName('MMM')[1]
}
Number.prototype.sys = String.prototype.sys = function(s) {
var x  = Number(this);
if (!x) return 'Ошибка'
x =  x.toString(s);
return x;
}
</script>
</head><body>
<input type="text" name="MMM"><br>
<input type="button" value="hex" onclick="document.MMM2.value = document.MMM.value.sys(16)"><input type="button" value="oct" onclick="document.MMM2.value = document.MMM.value.sys(8)"><input type="button" value="bin" onclick="document.MMM2.value = document.MMM.value.sys(2)">
<input type="text" name="MMM">
</body></html>

Agness 04.04.2012 23:09

Огромное спасибо!

melky 04.04.2012 23:45

Раед, попробуйте конвертировать 0 (нуль) :-/

Gvozd 05.04.2012 01:26

Раед,
Представьте что за каждое бессмысленное, ненужное и неуместное изменение стандартных прототипов, а равно любых не своих прототипов отрубали бы по одной руке.
У меня для вас плохие новости.

trikadin 05.04.2012 03:02

Agness, лучше так:

<html>
<head>
<script>
function convert(n) {
 var inp= document.getElementById("in");
 var out= document.getElementById("out");
 if (isNaN(parseFloat(inp.value))) {
  out.value= "Введите число"
 } else {
  out.value= parseFloat(inp.value).toString(n)
 }
}
</script>
</head>
<body>
<input id="in" />&nbsp;
<input id="out" readonly /><br />
<button onclick="convert(2)">Bin</button><br />
<button onclick="convert(8)">Oct</button><br />
<button onclick="convert(16)">Hex</button><br />
</body>
</html>

Раед 06.04.2012 23:34

Цитата:

Сообщение от Gvozd
Представьте что за каждое бессмысленное, ненужное и неуместное изменение стандартных прототипов, а равно любых не своих прототипов отрубали бы по одной руке.

За что? Чем плохо изменять прототипы? По-моему весьма удобно...

trikadin 07.04.2012 02:02

Раед, расширение стандартных свойств должно быть оправданно. А в вашем решении оправданностью и не пахнет. Изменять прототипы нужно ну крайне аккуратно - минус утечки памяти, неизвестные ошибки и прочие радости. Чем локальнее работает каждый кусок программы - тем устойчивее система в целом.

Раед 07.04.2012 23:56

Цитата:

Сообщение от trikadin
А в вашем решении оправданностью и не пахнет

Я понимаю, что в моём решении вообще говнокод полнейший: поэкспериментировал с именами, зачем то расширил Number, установил свойства document и некорректно работает с нулём.

Ещё вопрос: чем
isNaN(num)

отличается от
num===NaN

и что лучше юзать?

Kolyaj 08.04.2012 00:11

Цитата:

Сообщение от Раед
Ещё вопрос: чем
isNaN(num)

отличается от
num===NaN

Тем, что NaN никогда ничего не равно, даже самому себе.


Часовой пояс GMT +3, время: 13:02.