Elementor Header #8

10. Числа с плавающей точкой

1. Введение

Числа с плавающей точкой (floating-point numbers) используются в C# для представления дробных чисел. Они позволяют работать с вещественными числами, которые имеют десятичную часть, например:
3.14, -0.5, 123.456.

C# поддерживает несколько типов данных для чисел с плавающей точкой, различающихся по размеру и точности.


2. Основные типы чисел с плавающей точкой в C#

ТипРазмер (бит)Диапазон значенийТочностьПример
float32±1.5 × 10⁻⁴⁵ до ±3.4 × 10³⁸~6-7 знаков3.14159f
double64±5.0 × 10⁻³²⁴ до ±1.7 × 10³⁰⁸~15-16 знаков3.14159265358979
decimal128±1.0 × 10⁻²⁸ до ±7.9 × 10²⁸~28-29 знаков3.1415926535897932384626433m

📌 Важно:

  • float занимает меньше памяти, но менее точен.
  • doubleстандартный выбор для большинства вычислений.
  • decimal имеет высокую точность и используется для финансовых расчетов.

3. Объявление переменных с плавающей точкой

3.1. Использование float

				
					float pi = 3.14f; // Суффикс "f" обязателен
Console.WriteLine(pi);

				
			

📌 Почему нужен f?
По умолчанию дробные числа в C# воспринимаются как double, и без f будет ошибка «неявное приведение невозможно».

3.2. Использование double (по умолчанию)

				
					double e = 2.718281828459045;
Console.WriteLine(e);

				
			
3.3. Использование decimal (для точных расчетов)
				
					decimal price = 19.99m; // Суффикс "m" обязателен
Console.WriteLine(price);

				
			

📌 Почему m?
decimal требует суффикса m, чтобы не было ошибки «неявное приведение невозможно».


4. Арифметические операции с числами с плавающей точкой

4.1. Основные операции

				
					double a = 10.5, b = 3.2;
Console.WriteLine(a + b); // 13.7
Console.WriteLine(a - b); // 7.3
Console.WriteLine(a * b); // 33.6
Console.WriteLine(a / b); // 3.28125

				
			

4.2. Остаток от деления %

Остаток от деления также работает с double и float:

				
					Console.WriteLine(10.5 % 3.2); // 0.9

				
			

5. Проблемы точности чисел с плавающей точкой

5.1. Ошибка округления

Числа с плавающей точкой не всегда хранят точное значение.

				
					double x = 0.1 + 0.2;
Console.WriteLine(x); // 0.30000000000000004

				
			
Console.WriteLine(x); // 0.30000000000000004

📌 Почему так?
Числа 0.1 и 0.2 не могут быть представлены точно в двоичной системе, что вызывает небольшую ошибку округления.


6. Округление чисел

C# предоставляет несколько методов округления в классе Math:

МетодОписаниеПример
Math.Round(x)Округляет до ближайшего целогоMath.Round(2.7) → 3
Math.Round(x, n)Округляет до n знаков после запятойMath.Round(2.718, 2) → 2.72
Math.Floor(x)Округление внизMath.Floor(2.9) → 2
Math.Ceiling(x)Округление вверхMath.Ceiling(2.1) → 3

Пример:

				
					double num = 2.718281828;
Console.WriteLine(Math.Round(num, 2)); // 2.72
Console.WriteLine(Math.Floor(num)); // 2
Console.WriteLine(Math.Ceiling(num)); // 3

				
			

7. Вещественные числа и сравнение

7.1. Ошибка сравнения ==

Из-за погрешности сравнение == может работать неожиданно:

				
					double a = 0.1 + 0.2;
double b = 0.3;
Console.WriteLine(a == b); // false!

				
			
Правильный способ сравнения:
				
					double epsilon = 0.0000001;
Console.WriteLine(Math.Abs(a - b) < epsilon); // true

				
			

Заключение

Числа с плавающей точкой (float, double, decimal) широко используются для вычислений, но имеют особенности:

float – экономит память, но не очень точен.
double – стандартный вариант, лучший баланс точности и скорости.
decimal – высокая точность, но медленнее, подходит для финансовых расчетов.

Важно помнить про погрешность округления и использовать Math.Round() и Math.Abs() для точных вычислений.

Теперь вы умеете работать с вещественными числами в C#! 🚀

8. Тестовое задание

Задание 1: Вычисление площади круга

Напишите программу, которая:

  1. Запрашивает у пользователя радиус.
  2. Вычисляет площадь круга по формуле: S=πr2S = \pi r^2
  3. Округляет результат до двух знаков после запятой.

Пример кода:

				
					using System;

class Program
{
    static void Main()
    {
        Console.Write("Введите радиус круга: ");
        double radius = Convert.ToDouble(Console.ReadLine());

        double area = Math.PI * Math.Pow(radius, 2);
        Console.WriteLine($"Площадь круга: {Math.Round(area, 2)}");
    }
}

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

logo