Главная страница
    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.037 c
11-1099554883
DmiSb
2004-11-04 10:54
2005.06.29
MaskEdit в KOL


14-1117619301
acs
2005-06-01 13:48
2005.06.29
Новый продукт компании ACS inc.


14-1117710930
Andy BitOff
2005-06-02 15:15
2005.06.29
MakeCab.exe


4-1115131189
Misha aka Programmer
2005-05-03 18:39
2005.06.29
Проблема с окнами


1-1117788235
Elvis
2005-06-03 12:43
2005.06.29
принцип вставления смайликов в ICQ.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский