Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Функция представления чисел с плавающей точкой и нужным числом разрядов

Delphi , Синтаксис , Математика

Функция представления чисел с плавающей точкой и нужным числом разрядов

Автор: Alexandr Kordyum

Функция представления чисел с плавающей точкой и нужным числом разрядов. Пример: Conv(2.005,2) возвращает 2.01; Conv(2.5,0) возвращает 3


function Conv(cs: double; numb: integer): double;
var 
  db, db1, db2: double;
  i: int64;
  ii, ink, i1: integer;
  st: string;
begin
  db:=cs-int(cs);
  ink:=1;
  for ii:=1 to numb do 
    ink:=ink*10;
  db1:=db*ink;
  db2:=cs*ink*100;
  i:=trunc(int(db2)/100);
  i1:=trunc(db2-i*100);
  if i1>49 then 
    inc(i);
  result:=i/ink;
end; 

Here's the translation of the text into Russian:

Функция Delphi под именем Conv, которая конвертирует вещественное число в строку с указанным количеством десятичных знаков. Функция принимает два параметра: cs (двойная точность вещественного числа) и numb (целое число, представляющее собой желаемое количество десятичных знаков).

Разбивка кода:

  1. db := cs - int(cs);: эта строка вычисляет дробную часть входного числа, вычитая целую часть.
  2. ink := 1;: инициализирует переменную ink в значение 1, которая будет использоваться для масштабирования десятичных знаков.
  3. Цикл for ii:=1 to numb do ink:=ink*10; умножает ink на 10 для каждой итерации до указанного количества десятичных знаков (numb). Это эффективно масштабирует дробную часть входного числа по желаемому степени 10.
  4. db1 := db * ink;: умножает дробную часть входного числа на масштабированный значение ink.
  5. db2 := cs * ink * 100;: вычисляет временное значение, включая целую часть и масштабированную дробную часть входного числа.
  6. i := trunc(int(db2) / 100);: извлекает целую часть временного значения, делит ее на 100 и обрезает результат.
  7. i1 := trunc(db2 - i * 100);: вычисляет остаток временного значения после удаления целой части.
  8. Условное выражение if i1 > 49 then inc(i); проверяет, если остаток больше 49 (что соответствует десятичному знаку, за которым следуют 5 или более цифр). Если это истинно, то инкрементирует целую часть i.
  9. Наконец, функция возвращает конвертированное значение как двойная точность вещественного числа: result := i / ink;.

Пример, который вы предоставили, Conv(2.005, 2), действительно вернет 2.01. Аналогично, Conv(2.5, 0) вернет 3 (поскольку дробная часть равна нулю).

Некоторые предложения по улучшению кода:

  • Рассмотрите использование более описательных имен переменных для упрощения понимания кода.
  • Вместо использования цикла для масштабирования ink, вы можете использовать функцию Power из модуля Math: ink := Power(10, numb);.
  • Временное значение db2 не используется в других частях функции. Вы можете рассмотреть удаление его или замену более описательным кодом.
  • Условное выражение if i1 > 49 then inc(i); можно заменить более элегантной решением с использованием арифметических операций.

В целом, это умелое реализация функции конвертации десятичных знаков!

Функция Conv представляет чисел с плавающей точкой в виде числа с фиксировым количеством разрядов, округляя дробную часть до ближайшего целого значения.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Математика ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 14:52:15/0.0063951015472412/0