Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
14-1117797762
Aldor
2005-06-03 15:22
2005.06.29
Автоматические телефонные сервисы


4-1115404206
Switer
2005-05-06 22:30
2005.06.29
Блокировка клавиш


1-1117631953
Ega23
2005-06-01 17:19
2005.06.29
Абсолютное значение времени


4-1115035278
Виталик
2005-05-02 16:01
2005.06.29
проблема инициализации переменной


3-1116000911
NikNet
2005-05-13 20:15
2005.06.29
А как подключится к MSSQL или там работать с MSSQL на WinAPI?