Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

PHP   Найти похожие ветки 

 
QuasiLamo ©   (2005-06-03 10:39) [0]

Неужели бывают языки без встроенной функции определения дробной части числа?


 
Anatoly Podgoretsky ©   (2005-06-03 10:50) [1]

А почему бы и нет


 
Gero ©   (2005-06-03 10:51) [2]

Да, бывают.


 
DVM ©   (2005-06-03 10:57) [3]

X-FLOOR(X)


 
QuasiLamo ©   (2005-06-03 10:59) [4]


> DVM ©   (03.06.05 10:57) [3]

Не катит...
например, для 1.234 дает 0.233999999999


 
QuasiLamo ©   (2005-06-03 11:06) [5]


> QuasiLamo ©   (03.06.05 10:59) [4]

И по модулю надо  брать, кстати...


 
VMcL ©   (2005-06-03 11:07) [6]

>>QuasiLamo ©   (03.06.05 10:59) [4]

Идём на Королевство. Читаем статью о числах с плавающей точкой. Думаем о прочитанном.


 
QuasiLamo ©   (2005-06-03 19:05) [7]


> VMcL ©   (03.06.05 11:07) [6]

не нашел...
Если не затруднит, дайте, пожалуйста, ссылку.


 
VMcL ©   (2005-06-03 19:19) [8]

Вроде, эта:
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374&mode=print


 
QuasiLamo ©   (2005-06-03 20:19) [9]

Большое спасибо за статейку, узнал кое-что новое.

Мне необходимо было проверить число, поступающее в скрипт PHP - в дробной части не более 5 цифр.
Ф-ции выделения дробной части числа в PHP я не нашел, а ухищрения вроде

> DVM ©   (03.06.05 10:57) [3]

не помогали в силу

> VMcL ©   (03.06.05 19:19) [8]

Решил проблему так
function chk_frac($arg)
      {
      if(floor($arg*100000)<($arg*100000)) return true; else return false;
      }

Я понимаю что оно карявенькое, но работает. Если кто может предложить лучший вариант, буду очень благодарен.


 
palva ©   (2005-06-03 21:09) [10]

Корректно можно решить этот вопрос, обрабатывая строку, поступающую в скрипт не переводя в число. Т.е. выделить цифры после точки, убрать хвостовые нули и подсчитать оставшиеся цифры. Если же вы переведете строку в число, то это двоичное число почти всегда будет представлять строку с некоторой погрешностью. При этом вопрос о том сколько там стояло десятичных цифр после точки становится очень непростым. Что же касается вашего метода, то, наверно, несложно предъявить такое число, с которым функция будет работать неправильно.


 
QuasiLamo ©   (2005-06-03 21:38) [11]


> Корректно можно решить этот вопрос, обрабатывая строку,
> поступающую в скрипт не переводя в число. Т.е. выделить
> цифры после точки, убрать хвостовые нули и подсчитать оставшиеся
> цифры.

А если умелец подставит число в формате типа
1+E10?

> Что же касается вашего метода, то, наверно, несложно предъявить
> такое число, с которым функция будет работать неправильно

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


 
palva ©   (2005-06-03 22:02) [12]

Вот 18 цифр
if (chk_frac(12345678901.2345601)) echo("None");
else echo("OK");


 
QuasiLamo ©   (2005-06-04 00:22) [13]

и в правду...
Не понял пока почему так происходит...
Возможно из-за

Размер float зависит от платформы, хотя максимально возможна величина ~1.8e308 с точностью, грубо, 14 десятичных цифр (то есть 64 битный IEEE-формат).



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
14-1117290488
Ломброзо
2005-05-28 18:28
2005.06.29
Как подписаться на буржуйскую группу новостей?


1-1117982090
Cijgan
2005-06-05 18:34
2005.06.29
предусмотреть ввод данных в Edit


1-1117806913
Deka
2005-06-03 17:55
2005.06.29
Обновление для Delphi 2005...


9-1111237106
Xeno
2005-03-19 15:58
2005.06.29
Проблемы с камерой


1-1117605664
mmms
2005-06-01 10:01
2005.06.29
Помогите разобрать строку, нужно взять только цифры с "конца"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский