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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2009, 14:01   #1
xxxsas
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 79
Вопрос Как округлить число до сотых в Edit

встретил код округления чисел до сотых:
Код:
0.01*floor(100*(x)+0.5)
но он выдал, что floor не известна(надо подключить <Math.h>).
Применительно к Edit код должен выглядеть так:
Код:
0.01*floor(100*(StrToFloat(Edit->Text))+0.5)
проблема в том, что он не выдаст ошибку при числах 1.232 а не 1,232 (т.е. когда ставится точка, а не запятая), а также числа 1,555 округляет до 1,55(хотя при 5 он долже округлять в большую сторону)....

Для Delfi код выглядит:
Код:
Edit1.Text := Round (Значение, -2); //точность до 10E-2
Edit2.Text := FormatFloat ('#.##', Значение); // для понимания форматирования см. справку
В С++ Builder функция Round не известна...
функция FormatFloat присутствует, но как ее переделат под Edit ?...

Нашел в нете код матиматического округления говорят работает 90%(в очень редких случаях глючит)
для работы надо подключить
Код:
#include <math.h>
#include <math.hpp>
сама функция:
Код:
AnsiString TMainForm::Math_Round(double num, int precision)
{
  char old = DecimalSeparator;
  DecimalSeparator = '.';
  AnsiString s, number = FloatToStr(num);
  bool sign = false;
  double k = num;
  int pos = number.Pos('.');
  int len = number.Length();
  if ((pos == 0) || ((len - pos) <= precision)){
    DecimalSeparator = old;
    return FloatToStrF(k, ffFixed, 15, precision);
  }
  AnsiString prom = number.SubString(1, 1);
  if (prom == '-') sign = true;
  s = number.SubString(pos + precision + 1, 1);
  int i = StrToInt(s);
  if (i >= 5){
   if (sign)
     k = floor(num*Power(10, precision))/Power(10, precision);
   else
     k = ceil(num*Power(10, precision))/Power(10, precision);
  }else{
   if (!sign)
     k = floor(num*Power(10, precision))/Power(10, precision);
   else
     k = ceil(num*Power(10, precision))/Power(10, precision);
  }
  DecimalSeparator = old;
  return FloatToStrF(k, ffFixed, 15, precision);
}
Вопрос в том, как:
1) как можно округлять числа в Edit до сотых?
2) как при наличии 5 округлять в большую сторону?

Последний раз редактировалось xxxsas; 25.01.2009 в 09:20. Причина: находятся новые пути решения проблемы. Но все ли онит ведут к истине?
xxxsas вне форума Ответить с цитированием
Старый 25.01.2009, 02:09   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Код:
Edit->Text=0.01*(int)(100*(float)(x+0.005)) ;
Как то так!!
Reskov вне форума Ответить с цитированием
Старый 25.01.2009, 02:15   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Округление к большему функция ceil().
MaTBeu вне форума Ответить с цитированием
Старый 25.01.2009, 09:04   #4
xxxsas
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 79
По умолчанию

кстати ceil не просто округляет до целого числа (причем опять же если поставить точку после целой части, - на запятую отказавается правильно округлять).

Последний раз редактировалось xxxsas; 25.01.2009 в 09:30.
xxxsas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести число, предшествующее первому отрицательному и число, следующее за последним отрицательным Rid Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2008 16:50
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43
Число в Edit должно увеличиваться на 1 таймером DenSuper007x Помощь студентам 2 24.03.2008 10:59
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14