Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 17:50   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Округление числа с точкой

Добрый вечер! Не могу округлить число 30.9999 до 31. Пробывал все функции: Round, RoundTo, Trunc, но не получилось. Как округлять такого рода числа?
Если делаю так:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
 a: real;
begin
// a:=Strtofloat(Form1.label16.caption);
 Form1.Label17.Caption:=FLoatToStr(Round(30.9999));
end;
то работает, округляет правильно. А если так:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
 a: real;
begin
 a:=Strtofloat(Form1.label16.caption);
 Form1.Label17.Caption:=FLoatToStr(Round(а));
end;
то выдается ошибка, что "30.9999 is not valid integer".
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 02.02.2010 в 17:59.
artemavd вне форума Ответить с цитированием
Старый 02.02.2010, 18:07   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Во-первых, у вас переменная "а" - русская буква.
Во-вторых - почему для integer вы используете FLoatToStr ?
Хотя это и не влияет.
Все нормально работает - проверил.
mihali4 вне форума Ответить с цитированием
Старый 02.02.2010, 18:23   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Цитата:
Все нормально работает - проверил.
Какой из вариантов Вы проверили? И с чего вы взяли, что "а" русская?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.02.2010, 18:45   #4
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

artemavd, ваш 2-ой способ работает. У вас не получалось может быть из-за того что вы ставили в label16.caption точку, а нужно запятую
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 02.02.2010, 18:47   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 a : Real;
begin
 a:=Strtofloat(label1.caption);
 Caption:=FLoatToStr(Round(a));
end;
В label1.caption введите 30,9999

EDIT:
Не много опоздал, MalCer уже ответил.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 02.02.2010, 18:50   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код:
DecimalSeparator:='.';
это если нужна точка.
_Dmitry вне форума Ответить с цитированием
Старый 02.02.2010, 19:03   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Выркрутился так :
Код:
 //получаю первые четыре символа, по ним и округляю
 Form1.Label16.Caption:=Form1.Label11.Caption[1] +                 Form1.Label11.Caption[2] +',' +Form1.Label11.Caption[4];

procedure TForm1.Button4Click(Sender: TObject);
var
 t: real;
begin
 t:=Strtofloat(Form1.label16.caption);
 Form1.Label17.Caption:=FLoatToStr(Round(t));
end;
Теперь округляется. А как сделать, чтобы программа не ругалась на то, чтоо там стоит: точка или запятая? Предполагаю, что можно сделать программно через замену точки на запятую, но не делал этого.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.02.2010, 19:10   #8
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Для всей системы меняем здесь: Язык и региональные стандарты -> Настройка -> Разделитель целой и дробной части

Если нужно изменить только для вашей программы, то меняем значение переменной DecimalSeparator (можно в обработчике события FormCreate)
_Dmitry вне форума Ответить с цитированием
Старый 02.02.2010, 19:15   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Какой из вариантов Вы проверили? И с чего вы взяли, что "а" русская?)
Оба.
С того, что я скопировал ваш код и Дельфи меня обругала.
Поменял на латинскую - все нормально.
mihali4 вне форума Ответить с цитированием
Старый 02.02.2010, 20:06   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Спасибо всем! Всем поставил "+"!
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Округление числа до заданной точности Siluet Общие вопросы Delphi 3 15.04.2009 17:39
Округление числа Pinya Microsoft Office Excel 2 18.09.2008 18:01
Числа с плав. точкой или запятой? dx+ Общие вопросы Delphi 1 08.05.2008 16:47
Числа с плавающей точкой Blondinka Общие вопросы Delphi 8 21.09.2007 11:32