Проверка количества введенных после запятой знаков.

Часто приходиться проверять то, что вводит пользователь в форму. Одна из таких проверок – количество чего – то там. Стандартно надо проверять: является ли введенный текст числом и больше ли он нуля. Однако есть еще одна не мало важная проверка – контроль количество введенных после запятой знаков.

На первый взгляд в этом нет ничего сложно ведь есть замечательная функция. Функция 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.  Для того что бы избавиться от этого потом прибавим целое число, то результат будет правильным.

Share

Tags: ,

3 Responses to “Проверка количества введенных после запятой знаков.”

  1. Какова же ваша точка зрения ?

  2. Boog пишет:

    Arietcls like this make life so much simpler.

  3. здесь пишет:

    +1. Подписался.

Leave a Reply