Полное руководство. С# 4.0
Шрифт:
Вероятно, самым распространенным в программировании целочисленным типом является тип int. Переменные типа int нередко используются для управления цикла ми, индексирования массивов и математических расчетов общего назначения. Когда же требуется целочисленное значение с большим диапазоном представления чисел, чем у типа int, то для этой цели имеется целый ряд других целочисленных типов. Так, если значение нужно сохранить без знака, то для него можно выбрать тип uint, для больших значений со знаком — тип long, а для больших значений без знака — тип ulong. В качестве примера ниже приведена программа, вычисляющая расстояние от Земли до Солнца в дюймах.
Вот как выглядит результат выполнения этой программы. Расстояние до Солнца: 5892480000000 дюймов.
Очевидно, что этот результат нельзя было бы сохранить в переменной типа int или uint.
Самыми мелкими целочисленными типами являются byte и sbyte. Тип byte представляет целые значения без знака в пределах от 0 до 255. Переменные типа byte особенно удобны для обработки исходных двоичных данных, например байтового по тока, поступающего от некоторого устройства. А для представления мелких целых зна чений со знаком служит тип sbyte. Ниже приведен пример программы, в которой переменная типа byte используется для управления циклом, где суммируются числа от 1 до 100. // Использовать тип byte. using System; class Use_byte { static void Main { byte x; int sum; sum = 0; for(x = 1; х <= 100; х++) sum = sum + х; Console.WriteLine("Сумма чисел от 1 до 100 равна " + sum); } }
Результат выполнения этой программы выглядит следующим образом. Сумма чисел от 1 до 100 равна 5050
В приведенном выше примере программы цикл выполняется только от 1 до 100, что не превышает диапазон представления чисел для типа byte, и поэтому для управ ления этим циклом не требуется переменная более крупного типа.
Если же требуется целое значение, большее, чем значение типа byte или sbyte, но меньшее, чем значение типа int или uint, то для него можно выбрать тип short или ushort. Типы для представления чисел с плавающей точкой
Типы с плавающей точкой позволяют представлять числа с дробной частью. В С# имеются две разновидности типов данных с плавающей точкой: float и double. Они представляют числовые значения с одинарной и двойной точностью соответственно. Так, разрядность типа float составляет 32 бита, что приближенно соответствует диапа зону представления чисел от 5Е-45 до 3,4Е+38. А разрядность типа double составляет 64 бита, что приближенно соответствует диапазону представления чисел от 5Е-324 до 1,7Е+308.
В программировании на С# чаще применяется тип double, в частности, потому, что во многих математических функциях из библиотеки классов С#, которая одновре менно является библиотекой классов для среды .NET Framework, используются чис ловые значения типа double. Например, метод Sqrt, определенный в библиотеке классов System.Math, возвращает значение типа double, которое представляет собой квадратный корень из аргумента типа double, передаваемого данному методу. В при веденном ниже примере программы метод Sqrt используется для вычисления ра диуса окружности по площади круга. // Определить радиус окружности по площади круга. using System; class FindRadius { static void Main { Double r; Double area; area = 10.0; r = Math.Sqrt(area / 3.1416); Console.WriteLine("Радиус равен " + r); } }
Результат выполнения этой программы выглядит следующим образом. Радиус равен 1.78412203012729
В приведенном выше примере программы следует обратить внимание на вызов ме тода Sqrt. Как упоминалось выше, метод Sqrt относится к классу Math, поэтому в его Вызове имя Math предшествует имени самого метода. Аналогичным образом имя класса Console предшествует имени метода WriteLine в его вызове. При вызове некоторых, хотя и не всех, стандартных методов обычно указывается имя их класса, как показано в следующем примере.
В следующем примере программы демонстрируется применение нескольких три гонометрических функций, которые относятся к классу Math и входят в стандартную библиотеку классов С#. Они также оперируют данными типа double. В этом примере на экран выводятся значения синуса, косинуса и тангенса угла, измеряемого в пределах от 0,1 до 1,0 радиана. // Продемонстрировать применение тригонометрических функций. using System; class Trigonometry { static void Main { Double theta; // угол в радианах for(theta = 0.1; theta <= 1.0; theta = theta +0.1) { Console.WriteLine("Синус угла " + theta + " равен " + Math.Sin(theta)); Console.WriteLine("Косинус угла " + theta + " равен " + Math.Cos(theta)); Console.WriteLine("Тангенс угла " + theta + " равен " + Math.Tan(theta)); Console.WriteLine; } } }
Ниже приведена лишь часть результата выполнения данной программы. Синус угла 0.1 равен 0.0998334166468282 Косинус угла 0.1 равен 0.995004165278026 Тангенс угла 0.1 равен 0.100334672085451 Синус угла 0.2 равен 0.198669330795061 Косинус угла 0.2 равен 0.980066577841242 Тангенс угла 0.2 равен 0.202710035508673 Синус угла 0.3 равен 0.29552020666134 Косинус угла 0.3 равен 0.955336489125606 Тангенс угла 0.3 равен 0.309336249609623
Для вычисления синуса, косинуса и тангенса угла в приведенном выше примере были использованы стандартные методы Math.Sin, Math.Cos и Math.Tan. Как и метод Math.Sqrt, эти тригонометрические методы вызываются с аргументом типа double и возвращают результат того же типа. Вычисляемые углы должны быть указаны в радианах. Десятичный тип данных
Вероятно, самым интересным среди всех числовых типов данных в C# является тип decimal, который предназначен для применения в финансовых расчетах. Этот тип имеет разрядность 128 бит для представления числовых значений в пределах от 1Е-28 до 7,9Е+28. Вам, вероятно, известно, что для обычных арифметических вычислений с плавающей точкой характерны ошибки округления десятичных значений. Эти ошиб ки исключаются при использовании типа decimal, который позволяет представить числа с точностью до 28 (а иногда и 29) десятичных разрядов. Благодаря тому что этот тип данных способен представлять десятичные значения без ошибок округления, он особенно удобен для расчетов, связанных с финансами.
Ниже приведен пример программы, в которой тип decimal используется в кон кретном финансовом расчете. В этой программе цена со скидкой рассчитывается на основании исходной цены и скидки в процентах. // Использовать тип decimal для расчета скидки. using System; class UseDecimal { static void Main { decimal price; decimal discount; decimal discounted_price; // Рассчитать цену со скидкой. price = 19.95m; discount = 0.15m; // норма скидки составляет 15% discounted_price = price - ( price * discount); Console.WriteLine("Цена со скидкой: $" + discounted_price); } }