Аватар для yuppi
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293

Округление до цифр не равных нулю

09.04.2014, 16:56. Показов 2228. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как мне осуществить в Delphi округление до первых двух цифр не равных нулю после запятой.

a := 0.005645641641687184
Результат: 0.0056

b := 0.000005645641641687184
Результат: 0.0000056

Я знаю функции RoundTo и FormatFloat, но они не так работают.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2014, 16:56
Ответы с готовыми решениями:

Найти среднее арифметическое цифр данного числа, не равных нулю
Задачка на цикл while: Вводится натуральное число N.Найти среднее арифметическое цифр данного числа, не равных нулю. ...

Сумма цифр равных нулю натурального числа
Надо написать функцию и процедуру, чтобы выводила сумму цифр равных нулю натурального числа

Вычислить количество цифр кратных трём, но не равных нулю
Вычислить количество цифр кратных трём, но не равных нулю. Мне срочно нужна помощь по этому заданию

15
 Аватар для Jazon_deenAlt
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
09.04.2014, 17:01
как вариант процедуркой умножения на 10... ну эт так навскидку. типа умножаем на 10 до тех пор пока число не станет больше 9 например... тоесть
a := 0.005645641641687184
a := 0.05645641641687184
a := 0.5645641641687184
a := 5.645641641687184
a := 56.45641641687184
итого нам понадобилось 4 шага а теперь можно и FormatFloat зная сколько надо шагов
1
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
09.04.2014, 18:22
Да напиши свою функцию, типа
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
function my_round(x:extended):string;
var s,s1:string;
    i:integer;
begin
s:=floattostr(x);
s1:=copy(s,1,pos('.',s));//÷èñëî ïî òî÷êó
delete(s,1,pos('.',s));
i:=1;
while (i<=length(s))and(s[i]='0') do
 begin
  s1:=s1+s[i];
  i:=i+1
 end;
result:=s1+s[i]+s[i+1];
end;
var a:extended;
begin
a:=1/1038;
writeln(floattostrF(a,fffixed,20,15));
writeln(my_round(a));
readln
end.
1
 Аватар для yuppi
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
10.04.2014, 08:19  [ТС]
Спасибо за советы!

Puporev, описанная вами функция не работает.
Миниатюры
Округление до цифр не равных нулю  
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
10.04.2014, 08:30
У меня работает
Миниатюры
Округление до цифр не равных нулю  
1
 Аватар для yuppi
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
10.04.2014, 09:12  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
function my_round(x:extended):string;
var s,s1:string;
    i:integer;
begin
s:=floattostr(x);
s1:=copy(s,1,pos('.',s));
delete(s,1,pos('.',s));
i:=1;
while (i<=length(s))and(s[i]='0') do
 begin
  s1:=s1+s[i];
  i:=i+1
 end;
result:=s1+s[i]+s[i+1];
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var a:extended;
begin
a:=1/1038;
Edit1.Text := floattostrF(a,fffixed,20,15);
Edit2.Text := my_round(a);
end;
 
end.
Puporev, тот же результат. Может вы знаете, в чем проблема?
Миниатюры
Округление до цифр не равных нулю  
0
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
10.04.2014, 09:17
Я не знаю. К меня нормально выдает.
Вот запустил ваш код в Делфи 7.
Миниатюры
Округление до цифр не равных нулю  
1
 Аватар для Modesty
42 / 35 / 26
Регистрация: 29.11.2013
Сообщений: 77
10.04.2014, 10:08
подсказка 1 - у кого то разделитель ".", а у кого ",".
подсказка 2 - DecimalSeparator
1
Почетный модератор
 Аватар для Puporev
64319 / 47615 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
10.04.2014, 10:16
Лучший ответ Сообщение было отмечено yuppi как решение

Решение

Modesty, Благодарю за подсказку!
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function my_round(x:extended):string;
var s,s1:string;
    i:integer;
    c:char;
begin
s:=floattostr(x);
c:=decimalseparator;
s1:=copy(s,1,pos(c,s));
delete(s,1,pos(c,s));
i:=1;
while (i<=length(s))and(s[i]='0') do
 begin
  s1:=s1+s[i];
  i:=i+1
 end;
result:=s1+s[i]+s[i+1];
end;
1
 Аватар для yuppi
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
10.04.2014, 10:43  [ТС]
У меня новый вопрос)) Программа работает нормально до тех пор, пока мы вводим значение с тремя нулями после запятой. Если нулей большей, программа перестает выдавать нужный результат.
Миниатюры
Округление до цифр не равных нулю  
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
10.04.2014, 10:54
Цитата Сообщение от yuppi Посмотреть сообщение
Если нулей больше
то FloatToStr считает такой вывод вещественного числа некошерным. И выводит в виде 9,63Е-5
1
 Аватар для yuppi
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
10.04.2014, 11:35  [ТС]
northener, как этого избежать?
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
10.04.2014, 11:41
Цитата Сообщение от yuppi Посмотреть сообщение
как этого избежать?
Использовать всегда экспоненциальный формат вывода вещественного числа и не мучиться ерундой. Ну а если очень хочется помучиться, то выбирать способ форматирования в зависимости от величины числа.
0
 Аватар для Modesty
42 / 35 / 26
Регистрация: 29.11.2013
Сообщений: 77
10.04.2014, 12:46
s:=floattostr(x); заменить s:=floattostrF(x,fffixed,20,15);
1
 Аватар для yuppi
12 / 4 / 1
Регистрация: 22.01.2012
Сообщений: 293
10.04.2014, 13:09  [ТС]
Puporev, скажите, пожалуйста, а как переделать этот код, чтобы производилось именно округление? По коду ведь получается, просто отбрасывание остальных цифр.
0
 Аватар для Modesty
42 / 35 / 26
Регистрация: 29.11.2013
Сообщений: 77
10.04.2014, 14:15
Цитата Сообщение от northener Посмотреть сообщение
Использовать всегда экспоненциальный формат вывода вещественного числа и не мучиться ерундой.
Delphi
1
2
3
4
5
6
7
8
9
var a:extended;
  s: string;
begin
 a:=1/10546;
 
s:= floattostrF(a,ffExponent,2,0);
Edit1.Text:=floattostrF(a,fffixed,30,30);
Edit2.Text := floattostrF(Strtofloat(s),fffixed,25,StrToInt(copy(s,pos('-',s)+1,Length(s)))+1);
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2014, 14:15
Помогаю со студенческими работами здесь

Написать программу, которая из всех цифр, встретившихся в строке и не равных нулю, формирует наименьшее число
Добрый день,дали задачу по информатике,сказали из с4. Условие задачи: На вход программе подается последовательность символов,состоящая...

Округление к нулю
Доброго времени суток! Задали задание написать макрос выделения целой части дробного числа. В коде пытаюсь установить округление к нулю....

Подсчет элементов не равных нулю
есть программа подсчета нечетных элементов. как написать подсчет элементов не равных нулю? mov ax, data mov ds, ax ...

Количество элементов массива, равных нулю
Найти количество элементов массива состоящий из N элементов, равных нулю.

Подсчитать количество чисел, равных нулю
Здравствуйте. Помогите разобраться с такой задачей: В текстовом файле содержится последовательность действительных чисел. Подсчитать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru