parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Похоже на баг...

Sumo 26.09.2003 01:42 / 26.09.2003 01:44

Ибо согласно документации должно быть:
При преобразовании вещественного числа к целому производится округление.
В модуле pa_string.C для преобразования применяется стандартная функция strtol, а она не производит никаких округлений - сразу выдает ошибку, как встречает в строке точку.

Патчик: :)
int String::as_int() const { 
	int result;
	const char *str=cstr();

	while(*str && isspace(*str))
		str++;
	if(!*str)
		return 0;

	char *error_pos;
	// 0xABC
	if(str[0]=='0')
		if(str[1]=='x' || str[1]=='X')
			result=(int)(unsigned long)strtol(str, &error_pos, 0);
		else
			result=(int)round(strtod(str+1/*skip leading 0*/, &error_pos));
	else
		result=(int)round(strtod(str, &error_pos));

	while(char c=*error_pos++)
		if(!isspace(c))
			throw Exception("number.format",
				this,
				"invalid number (int)");

	return result;
}