Целая и дробная часть
А теперь правильный ответ ответ:
var x = 12.5432;
x = x - (x%1);
В результате x будет равен 12.
Все! С вами был Dico
З.Ы. Интеграция с фейсбуком неправильная, кодировка не та. Админу на учет.
Для получения целого числа достаточно привести его насильно к int, тогда дробь откинется. А затем из дробного числа вычесть полученное целое - выйдет тебе и дробная часть.
по-моему надо Math.floor(x) /* целая часть */ и x - Math.floor(x) /* дробная часть*/
Решил попробовать сам:
[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 - вне вычислений)
Важно: данный скрипт не предназначен для определения, является ли значение числом и т.д. Для этого используйте функции приведения типов.
Рад, если кому пригодится.
2Kesano: настоятельно вам рекомендую не отвечать в тех топиках, в которых вы не знаете о чем идет речь - не стоит так часто выставлять себя в глупом виде. Не знать не стыдно - стыдно не пытаться научиться или делать вид, что все знаешь.
Решение для тех до кому совсем тяжело дойти самим
var x = parseInt(z); //Целая часть
var y = z - x; //Дробная часть
Ты другие его ответы и вопросы посмотри - у него это похоже в ДНК. Он просто отвечает, не понимая о чем идет разговор - лишь бы отметиться в теме. И вопросы задает примерно таким же образом приводя код один, имея ввиду второе, а ошибка на самом деле в третьем
2Kesano: настоятельно вам рекомендую не отвечать в тех топиках, в которых вы не знаете о чем идет речь - не стоит так часто выставлять себя в глупом виде. Не знать не стыдно - стыдно не пытаться научиться или делать вид, что все знаешь.
Решение для тех до кому совсем тяжело дойти самим
var x = parseInt(z); //Целая часть
var y = z - x; //Дробная часть
Друг, у тебя беда. Тебе нужно лечиться...
Во-первых, я предложил вариант (т.к. нагуглил много подобных вопросов), а не сказал, что так - исключительно верно + написал, что не подходит для дальнейших математических операций и работы с типами.
Во-вторых, мой код хорошо работает и имеет право на жизнь.
В-третьих, настоятельно рекоммендую поучать своих детей (хотя, у такого социопата как ты вероятность их наличия стремится к нулю), а не кого-то и интернете.
2) То что код работает еще не означает, что он правильный. Есть такое понятие "индусский код". Вот именно такой ты и привел.
3) Количество моих детей и моя личная жизнь тебя не касаются ни в какой мере.
Имхо, даже в не типизированных языках надо придерживать типизации. И если дано число, то надо работать с числом. А если дана строка, то надо сначала (перед выделением дробной и целой частей) привести её к числу (с соответствующими проверками), а потом уже стандартными вышеописанными средствами получить дробную и целую часть. А если вот пихать эти регулярки, ненужную универсальность и т.д. - получится индусский код.
Это чем-то напоминает, кстати, времена раннего html. Когда браузер жевал невалидные страницы типа:
<p>ololo1<p>asdf</p><br><hr>
<ul><li>1<li>2
</body>
Здесь код и прочитается корректно, и отобразиться должен нормально, но на деле получится полное угнетающее УГ. Вот ваш пример с регуляркими и прочими нетривиальными решениями - то же самое.
var x = parseInt(z); //Целая часть
даст x=223, в то время как попытка выделить дробную часть как писалось выше вернет NaN. По логике должно быть так: если аргумент не является числом то ни целая ни дробная части не должны извлекаться -- и именно так будет с использованием Math.floor().
Дальше с т.зр. критики высказанной в адрес Kesano: по-моему использование parseInt() имеет в принципе тот же недостаток -- по причинам только что описанным.
Можно долго продолжать... )
2) То что код работает еще не означает, что он правильный. Есть такое понятие "индусский код". Вот именно такой ты и привел.
3) Количество моих детей и моя личная жизнь тебя не касаются ни в какой мере.
1. Во фразе "число в строке" я не вижу ничего противоестественного.
2. Нет понятия "правильный" код, если он работает так как задумано. Есть "Оптимизированный" и "Неоптимизированный"
3. Как и их отсутствие (по понятным причинам) тоже. Я задал тебе вектор твоих нравоучений. Выполняй.
UAS, я же черным по белому написал, что мой код решает вопрос, но не годится для дальнейшей математики.
Мой код умышленно направлен на то чтобы вывести 2 числа: цифры ДО точки, и ПОСЛЕ точки, без 0 и разделителя... просто 2 цифры...
Математически мой код лишен смысла, что я не скрываю. То, что он УГ - не согласен.
var x = parseInt(z); //Целая часть
Можно долго продолжать... )
Ну, собственно, из такой строки мой код и способен вытащить значения.
Уж простите, UAS, RussianSpy, я продолжу быдлокодить.
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("Число не найдено!");
}
При этом, из регулярки убрана запятая в качестве разделитея в числе, т.к. математические операции не будут работать.
В общем, вытащить число и разбить его можно... Главное - четкая цель...
Автор топика спрашивал как получить целую и дробную часть ЧИСЛА. ЧИСЛА господа. Он интересовался математической операцией, а не анализом текстов.
2Kesano: никто не говорил, что ваша функция работать не будет. Но она тут неуместна - она применяется к тексту с целью выдернуть из него числа (и то сработает некорректно, если чисел там больше одного). Речь идет о том, что она абсолютно избыточна для математических операций. Можно бороться с гопниками отжавшими у вас мобилку с помощью установок залпового огня "Град", но это избыточно, гораздо эффективнее, дешевле и быстрее обойдутся простые способы вроде милицейского или просто дубиной промеж глаз. Тут ровно то же самое
ну вобще-то математически резльтат будет верным (это же объект Math! ; )) хотя и парадоксальным для обывателя. Проблема в том, что в некоторых ситуациях и результат parseInt() от отрицательного аргумента можно считать некорректным.
а по поводу Kesano я лишь имел в виду что то что говорилось о его коде отчасти применимо и к parseInt...
floor возвращает ближайшее целое число, меньшее аргумента. Следовательно операция floor(4.543) вернет 4, в то время как операция floor(-4.543) вернет результат -5