﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
1088	[patch] isValidFloat has logic errors	Yango	Adrian Holovaty	"It's missing the case when the whole part is greater than max_digits-decimal_places, which leads to ProgrammingError raised when you add such a number

Corrected version:


{{{
class IsValidFloat:
    def __init__(self, max_digits, decimal_places):
        self.max_digits, self.decimal_places = max_digits, decimal_places

    def __call__(self, field_data, all_data):
        data = str(field_data)
        try:
            float(data)
        except ValueError:
            raise ValidationError, _(""Please enter a valid decimal number."")
        if len(data) > (self.max_digits + 1):
            raise ValidationError, ngettext( ""Please enter a valid decimal number with at most %s total digit."",
                ""Please enter a valid decimal number with at most %s total digits."", self.max_digits) % self.max_digits
        if (not '.' in data and len(data) > (self.max_digits - self.decimal_places)) or ('.' in data and len(data.split('.')[1]) == 0 and len(data) > (self.max_digits - self.decimal_places + 1)):
            raise ValidationError, ngettext( ""Please enter a valid decimal number with a whole part of at most %s digit."",
                ""Please enter a valid decimal number with a whole part of at most %s digits."", str(int(self.max_digits)-int(self.decimal_places))) % str(int(self.max_digits)-int(self.decimal_places))
        if '.' in data and len(data.split('.')[1]) > self.decimal_places:
            raise ValidationError, ngettext(""Please enter a valid decimal number with at most %s decimal place."",
                ""Please enter a valid decimal number with at most %s decimal places."", self.decimal_places) % self.decimal_places
}}}
"	defect	closed	Validators		normal	fixed			Unreviewed	1	0	0	0	0	0
