Часто приходиться проверять то, что вводит пользователь в форму. Одна из таких проверок – количество чего – то там. Стандартно надо проверять: является ли введенный текст числом и больше ли он нуля. Однако есть еще одна не мало важная проверка – контроль количество введенных после запятой знаков.
На первый взгляд в этом нет ничего сложно ведь есть замечательная функция. Функция Frac возвращает дробную часть числа с плавающей запятой.
function Frac ( const Number : Extended ) : Extended;
Однако, при практическом использовании встретился с рядом трудностей и экспериментальным путем установил, что пригодным к использованию является приведенный ниже код.
// получаем дробную часть числа, которая может быть после трех знаков lFrac:= (Frac(StrtoFloat(edt.Text)*1000+1)); // Проверяю, равна ли нулю дробная часть. Подводный камень заключается в том, что пользователь может обойти проверку, введя число с восьмым знаком после запятой. lResult:= (abs(lFrac - 0)<0.0000001);
следует заметить, что к Frac(StrtoFloat(edt.Text)*1000 надо прибавить 1 потому, что выделение целой части числа которое есть двойка в степени (2, 4, 8, 26, 32, 64, 128 и тд. ) дает не верный результат. Например, если если ввести 0.002 , то результат выделение целой части будет 1, а не 0. Для того что бы избавиться от этого потом прибавим целое число, то результат будет правильным.
Еще интересные записи по данной теме
Tags: Delphi, Инструкция
Какова же ваша точка зрения ?
Arietcls like this make life so much simpler.
+1. Подписался.