Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Ошибка при вводе дробных чисел


Автор: Гость_Артем 16.1.2006, 11:04
Здравствуйте! Я написал программу в С++ Builder 6, в которой используются дробные числа. Ввод данных осуществляется при помощи текстовых окон LabeledEdit. На моём компьютере (у меня Windows XP) дробные числа вводить нужно с запятой (например 3,14159), а если программу запустить на компьютере с ОС Wndows 98, то нужно вводить числа с точкой (например 3.14159). Иначе появляется сообщение об ошибке:"... is not a valid floating point value". Подскажите мне, пожалуйста, как сделать так, чтобы числа можно было вводить и с точкой и с запятой вне зависимости от ОС. smile

Автор: Partizan 16.1.2006, 11:27
float Num;

Num = StrToFloat( StringReplace(LabeledEdit1->Text, '.', ',', TReplaceFlags()<< rfReplaceAll) );

Автор: _hunter 16.1.2006, 11:57
Partizan, а если на другой машине тоже нужно вводить с точкой? ;)

нужно на DecimalSeparator менять...

Автор: Гость_Артем 16.1.2006, 11:59
Большое Вам спасибо, Partizan! Теперь программа работает. Буду Вам очень признателен, если Вы ответите еще на один вопрос: В чем причина того, что программа на одном компьютере (ОС Windows XP) выдает одни результаты, а на другом (ОС Windows 98) - совсем другие, при одних и тех же исходных данных? Может быть это было связано с тем, что на одном компьютере я вводил дробные числа через запятую, а на другом - через точку? smile

Автор: Гость_Артем 16.1.2006, 12:09
Hunter, расскажите, пожалуйста, подробнее про DecimalSeparator? Заранее спасибо smile

Автор: _hunter 16.1.2006, 12:31
Цитата(Гость_Артем @ 16.1.2006, 10:59 Найти цитируемый пост)

программа на одном компьютере (ОС Windows XP) выдает одни результаты, а на другом (ОС Windows 98) - совсем другие, при одних и тех же исходных данных? Может быть это было связано с тем, что на одном компьютере я вводил дробные числа через запятую, а на другом - через точку? smile

если в результате ( во внутреннем представлении ) получились одинаковые числа -- то, как ты их вводил значения не имеет.

Цитата(Гость_Артем @ 16.1.2006, 11:09 Найти цитируемый пост)

Hunter, расскажите, пожалуйста, подробнее про DecimalSeparator

а что про него рассказывать? глобальная переменная, имеющая своим значением символ из региональных стандартов.

Автор: bigscorp 16.1.2006, 12:35
float ваще отстой луче double использовать (ну это я к токому выводц пришел)

про DecimalSeparator:
при вводе отлови что вбивают . или , и меняй ее на DecimalSeparator
так будет лучше, и еще отлови двойной ввод . или , , ну чтобы в результате число получилось

"0"+AnsiString(DecimalSeparator)+"000"; - будет точно число с плавающей точкой на любой машине, не важно какие стандарты установлены
а перед этим надо подключить #include <math.h>

еще хорошая вещь FormatFloat("0.00", StrToFloat(Edit->Text))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)