Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Целая и дробная часть

21K
14 ноября 2006 года
Kot9
2 / / 08.11.2006
Какая есть функции взятия целой и дробной части числа в JavaScript???
12
14 ноября 2006 года
alekciy
3.0K / / 13.12.2005
Взятия в смысле целое занести в одну переменную, а дробную часть в другую? split юзай.
70K
30 марта 2011 года
Рван Панченко
1 / / 30.03.2011
Вот поменьше бы таких ебанатиков в сети как Алексей, было бы меньше не отвеченных тем на форуме которые засоряют поисковики.

А теперь правильный ответ ответ:

var x = 12.5432;
x = x - (x%1);

В результате x будет равен 12.

Все! С вами был Dico

З.Ы. Интеграция с фейсбуком неправильная, кодировка не та. Админу на учет.
244
30 марта 2011 года
UAS
2.0K / / 19.07.2006
Че за тупой тролль. Который ещё темы 2006 года поднимает. Совсем идиот? Да и, Дико, совсем неверно ответил на вопрос.
Для получения целого числа достаточно привести его насильно к int, тогда дробь откинется. А затем из дробного числа вычесть полученное целое - выйдет тебе и дробная часть.
1.8K
30 марта 2011 года
LM(AL/M)
332 / / 20.12.2005
я что-то не понял насчёт "привести насильно к int". В js же нету приведения типов в стиле си -- y = (int) x?
по-моему надо Math.floor(x) /* целая часть */ и x - Math.floor(x) /* дробная часть*/
369
30 марта 2011 года
Kesano
451 / / 09.10.2007
Хоть и некротопик, но реально по гуглу простых и понятных решений мало.
Решил попробовать сам:

[HTML]
var str=6686.79-7456;
var reg=/\-?(\d*)\.?\,?(\d{0,5})/
var arr=reg.exec(str);

if(arr[0]!=""){
alert("Найдено: "+arr[0]+"\r\nЦелая часть: "+arr[1]+"\r\nДробная часть: "+arr[2]);
}
else {
alert("Число не найдено!");
}[/HTML]
Особенности:
1. Читает 0 и более знаков до точки, до 5 знаков после точки.
2. Читает отрицательные числа
3. Способно переварить строку вида "6587df" и выделит 6587
4. Если приведена строка, а не результат математического вычисления, и число содержит запятую, вместо точки, сожрет и ее 123,456,789=>123 и 456 (789 - вне вычислений)

Важно: данный скрипт не предназначен для определения, является ли значение числом и т.д. Для этого используйте функции приведения типов.

Рад, если кому пригодится.
13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
Друзья, у вас какая-то беда. UAS указал вам верное решение. То, что вы не знаете языка JavaScript еще не значит что UAS ошибся. Просто вам как и всегда лень залезть в мануал.
2Kesano: настоятельно вам рекомендую не отвечать в тех топиках, в которых вы не знаете о чем идет речь - не стоит так часто выставлять себя в глупом виде. Не знать не стыдно - стыдно не пытаться научиться или делать вид, что все знаешь.

Решение для тех до кому совсем тяжело дойти самим
 
Код:
var z = 223.71254;
var x = parseInt(z); //Целая часть
var y = z - x; //Дробная часть
244
30 марта 2011 года
UAS
2.0K / / 19.07.2006
Kesano) o_O Нафиг такое извращение? Какая-то абсолютно лишняя и ненужная гибкость.
13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
Цитата: UAS
Kesano) o_O Нафиг такое извращение? Какая-то абсолютно лишняя и ненужная гибкость.



Ты другие его ответы и вопросы посмотри - у него это похоже в ДНК. Он просто отвечает, не понимая о чем идет разговор - лишь бы отметиться в теме. И вопросы задает примерно таким же образом приводя код один, имея ввиду второе, а ошибка на самом деле в третьем

369
30 марта 2011 года
Kesano
451 / / 09.10.2007
Цитата: RussianSpy
Друзья, у вас какая-то беда. UAS указал вам верное решение. То, что вы не знаете языка JavaScript еще не значит что UAS ошибся. Просто вам как и всегда лень залезть в мануал.
2Kesano: настоятельно вам рекомендую не отвечать в тех топиках, в которых вы не знаете о чем идет речь - не стоит так часто выставлять себя в глупом виде. Не знать не стыдно - стыдно не пытаться научиться или делать вид, что все знаешь.

Решение для тех до кому совсем тяжело дойти самим
 
Код:
var z = 223.71254;
var x = parseInt(z); //Целая часть
var y = z - x; //Дробная часть



Друг, у тебя беда. Тебе нужно лечиться...
Во-первых, я предложил вариант (т.к. нагуглил много подобных вопросов), а не сказал, что так - исключительно верно + написал, что не подходит для дальнейших математических операций и работы с типами.
Во-вторых, мой код хорошо работает и имеет право на жизнь.
В-третьих, настоятельно рекоммендую поучать своих детей (хотя, у такого социопата как ты вероятность их наличия стремится к нулю), а не кого-то и интернете.

13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
1) Ты бы сначала вопрос прочитал, а потом лепил найденный где-то в сети непонятно какой код. Вопрос звучит в получении целой и дробной части ЧИСЛА. ЧИСЛА, а не строки.
2) То что код работает еще не означает, что он правильный. Есть такое понятие "индусский код". Вот именно такой ты и привел.
3) Количество моих детей и моя личная жизнь тебя не касаются ни в какой мере.
244
30 марта 2011 года
UAS
2.0K / / 19.07.2006
Кажись, использование JavaScript и прочих не типизированных языков, типа PHP, помутило ваш мозг) Вот то что вы написали - как раз чушь полная) Вот нафига выделение цифр из строки, разделители разрядов и т.д. Число есть число. А если строить такие вот системы, которые едят все подряд и сами обрабатывают - потом будете черпать сотни ошибок.
Имхо, даже в не типизированных языках надо придерживать типизации. И если дано число, то надо работать с числом. А если дана строка, то надо сначала (перед выделением дробной и целой частей) привести её к числу (с соответствующими проверками), а потом уже стандартными вышеописанными средствами получить дробную и целую часть. А если вот пихать эти регулярки, ненужную универсальность и т.д. - получится индусский код.

Это чем-то напоминает, кстати, времена раннего html. Когда браузер жевал невалидные страницы типа:
 
Код:
<body>
<p>ololo1<p>asdf</p><br><hr>
<ul><li>1<li>2
</body>

Здесь код и прочитается корректно, и отобразиться должен нормально, но на деле получится полное угнетающее УГ. Вот ваш пример с регуляркими и прочими нетривиальными решениями - то же самое.
1.8K
30 марта 2011 года
LM(AL/M)
332 / / 20.12.2005
все-таки считаю что Math.floor() лучше чем parseInt() потому что парсинг есть парсинг и выделение целой части в parseInt() -- лишь побочный эффект, и вообще в хорошем коде вещи должны называться своими именами. Во-вторых, в спецификации parseInt() говорится что ожидаемый тип аргумента -- строка, а как оно с числами работает неизвестно, может оно сначала преобразует в строку а уж потом парсит. Отсюда следует, кстати, что такой код
 
Код:
var z = "223.71254sdhjfdhskj";
var x = parseInt(z); //Целая часть

даст x=223, в то время как попытка выделить дробную часть как писалось выше вернет NaN. По логике должно быть так: если аргумент не является числом то ни целая ни дробная части не должны извлекаться -- и именно так будет с использованием Math.floor().
Дальше с т.зр. критики высказанной в адрес Kesano: по-моему использование parseInt() имеет в принципе тот же недостаток -- по причинам только что описанным.
Можно долго продолжать... )
369
30 марта 2011 года
Kesano
451 / / 09.10.2007
Цитата: RussianSpy
1) Ты бы сначала вопрос прочитал, а потом лепил найденный где-то в сети непонятно какой код. Вопрос звучит в получении целой и дробной части ЧИСЛА. ЧИСЛА, а не строки.
2) То что код работает еще не означает, что он правильный. Есть такое понятие "индусский код". Вот именно такой ты и привел.
3) Количество моих детей и моя личная жизнь тебя не касаются ни в какой мере.



1. Во фразе "число в строке" я не вижу ничего противоестественного.
2. Нет понятия "правильный" код, если он работает так как задумано. Есть "Оптимизированный" и "Неоптимизированный"
3. Как и их отсутствие (по понятным причинам) тоже. Я задал тебе вектор твоих нравоучений. Выполняй.

369
30 марта 2011 года
Kesano
451 / / 09.10.2007
Цитата: UAS
Кажись, использование JavaScript и прочих не типизированных языков, типа PHP, помутило ваш мозг) Вот то что вы написали - как раз чушь полная) Вот нафига выделение цифр из строки, разделители разрядов и т.д. Число есть число.



UAS, я же черным по белому написал, что мой код решает вопрос, но не годится для дальнейшей математики.
Мой код умышленно направлен на то чтобы вывести 2 числа: цифры ДО точки, и ПОСЛЕ точки, без 0 и разделителя... просто 2 цифры...
Математически мой код лишен смысла, что я не скрываю. То, что он УГ - не согласен.

Цитата: LM(AL/M)

 
Код:
var z = "223.71254sdhjfdhskj";
var x = parseInt(z); //Целая часть

Можно долго продолжать... )


Ну, собственно, из такой строки мой код и способен вытащить значения.

Уж простите, UAS, RussianSpy, я продолжу быдлокодить.

Код:
var str="223.71254sdhjfdhskj";
var reg=/\-?(\d*)\.?(\d{0,5})/
var arr=reg.exec(str);

if(arr[0]!=""){
var x = parseInt(arr[0]); //целая часть
var y = arr[0]-x;
alert("Найдено: "+arr[0]+"\r\nЦелая часть: "+x+"\r\nДробная часть: "+y);
}
else {
alert("Число не найдено!");
}

При этом, из регулярки убрана запятая в качестве разделитея в числе, т.к. математические операции не будут работать.

В общем, вытащить число и разбить его можно... Главное - четкая цель...
13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
2LM(AL/M): отлично. А теперь попробуйте применить ваш метод с floor() к отрицательным числам. Что касается Kesano я уже все сказал по поводу его ответов и впредь намерен игнорировать ту чушь которую он пишет.

Автор топика спрашивал как получить целую и дробную часть ЧИСЛА. ЧИСЛА господа. Он интересовался математической операцией, а не анализом текстов.

2Kesano: никто не говорил, что ваша функция работать не будет. Но она тут неуместна - она применяется к тексту с целью выдернуть из него числа (и то сработает некорректно, если чисел там больше одного). Речь идет о том, что она абсолютно избыточна для математических операций. Можно бороться с гопниками отжавшими у вас мобилку с помощью установок залпового огня "Град", но это избыточно, гораздо эффективнее, дешевле и быстрее обойдутся простые способы вроде милицейского или просто дубиной промеж глаз. Тут ровно то же самое
1.8K
30 марта 2011 года
LM(AL/M)
332 / / 20.12.2005
Цитата: RussianSpy
А теперь попробуйте применить ваш метод с floor() к отрицательным числам



ну вобще-то математически резльтат будет верным (это же объект Math! ; )) хотя и парадоксальным для обывателя. Проблема в том, что в некоторых ситуациях и результат parseInt() от отрицательного аргумента можно считать некорректным.

а по поводу Kesano я лишь имел в виду что то что говорилось о его коде отчасти применимо и к parseInt...

13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
Я не просто так акцентирую ваше внимание на отрицательных числах.
floor возвращает ближайшее целое число, меньшее аргумента. Следовательно операция floor(4.543) вернет 4, в то время как операция floor(-4.543) вернет результат -5
1.8K
30 марта 2011 года
LM(AL/M)
332 / / 20.12.2005
я именно так и понял, поэтому и говорю что математически результат floor() верный.
13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
Математически да. Но это не тот результат, который требуется в большинстве случаев. Поэтому и используется приведение к инту. Вас же не смущает, что часто используют побитовый сдвиг для умножения? Так почему должно смущать приведение к инту?
1.8K
30 марта 2011 года
LM(AL/M)
332 / / 20.12.2005
меня смущает лишь то что парсинг объявляют приведением к целому... и то что нет подходящей функции для такой полезной операции как извлечение целой части
13
30 марта 2011 года
RussianSpy
3.0K / / 04.07.2006
С вашей претензией согласен ;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог