Главная страница
    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.082 c
1-1117782191
BigBan
2005-06-03 11:03
2005.06.29
Операции со строками


14-1117269326
Kerk
2005-05-28 12:35
2005.06.29
обложка Schaufenster


14-1115242958
i-s-v
2005-05-05 01:42
2005.06.29
SMS


1-1117622833
chili
2005-06-01 14:47
2005.06.29
Подскажите как работать с libpq.dll для 8.0?


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