Windows forms преобразование строки в число

Перевод строки в число C# Решение и ответ на вопрос 1766309

doctor-i-bolit

0 / 0 / 0

Регистрация: 14.06.2015

Сообщений: 23

1

Перевод строки в число

19.06.2016, 15:10. Показов 8647. Ответов 6

Метки нет (Все метки)


Не переводит строку в число и не проверяется условие. При вводе в текстбокс. Выбивает ошибку
Вот сам код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                Int32 pa=Convert.ToInt32(textBox8.Text);
                 if (0.025>pa)
                 {
                 MessageBox.Show ("Давления в линии всасывания I ступени компрессора В-521 должна быть больше 0,025","Внимание!",MessageBoxButtons.OK,MessageBoxIcon.Error);
                 }
               if (pa>0.033)
               {
               MessageBox.Show("Давления в линии всасывания I ступени компрессора В-521 должна быть меньше 0,033","Внимание!",MessageBoxButtons.OK,MessageBoxIcon.Error);
               }
 
                //аварийные значения
                textBox7.Text = "1000";
                string po= "0.03";
   
                textBox8.Text = po;
 
                textBox9.Text = "60";
            }

Вопрос в следующем, как лучше реализовать конвертицию для проверки условия?

Миниатюры

Перевод строки в число
 

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



0



Just_deniss

5 / 5 / 3

Регистрация: 07.04.2011

Сообщений: 58

19.06.2016, 15:39

2

doctor-i-bolit,

C#
1
            double a = Convert.ToDouble(txtInput.Text);



1



Denno

98 / 100 / 30

Регистрация: 21.10.2012

Сообщений: 320

19.06.2016, 20:45

3

Лучше:

C#
1
double a = Convert.ToDouble(txtInput, System.Globalization.CultureInfo.InvariantCulture);



1



0 / 0 / 0

Регистрация: 14.06.2015

Сообщений: 23

19.06.2016, 22:39

 [ТС]

4

а что за txtinput?



0



Ev_Hyper

Заблокирован

19.06.2016, 22:51

5

Цитата
Сообщение от Denno
Посмотреть сообщение

Лучше:

Denno, и чем-же лучше?



0



5 / 5 / 3

Регистрация: 07.04.2011

Сообщений: 58

19.06.2016, 22:59

6

doctor-i-bolit, Поле ввода: textBox8.Text, textBox9.Text ….



0



0 / 0 / 0

Регистрация: 14.06.2015

Сообщений: 23

19.06.2016, 23:47

 [ТС]

7

Скорее всего, потому что System.Globalization.CultureInfo.InvariantCulture нужна для того чтобы изменить чтения дробных чисел)
т.к. в США разделяются точками, а у нас запятыми
Где то читал просто, когда ответ на свою ошибку искал



0



How do I convert a string to an integer in C#?

Raktim Biswas's user avatar

asked Feb 26, 2010 at 19:57

user282078's user avatar

1

If you’re sure it’ll parse correctly, use

int.Parse(string)

If you’re not, use

int i;
bool success = int.TryParse(string, out i);

Caution! In the case below, i will equal 0, not 10 after the TryParse.

int i = 10;
bool failure = int.TryParse("asdf", out i);

This is because TryParse uses an out parameter, not a ref parameter.

k29's user avatar

k29

6326 silver badges25 bronze badges

answered Feb 26, 2010 at 19:59

Brandon's user avatar

BrandonBrandon

68k30 gold badges195 silver badges223 bronze badges

3

int myInt = System.Convert.ToInt32(myString);

As several others have mentioned, you can also use int.Parse() and int.TryParse().

If you’re certain that the string will always be an int:

int myInt = int.Parse(myString);

If you’d like to check whether string is really an int first:

int myInt;
bool isValid = int.TryParse(myString, out myInt); // the out keyword allows the method to essentially "return" a second value
if (isValid)
{
    int plusOne = myInt + 1;
}

answered Feb 26, 2010 at 19:58

devuxer's user avatar

devuxerdevuxer

41.3k47 gold badges176 silver badges290 bronze badges

int a = int.Parse(myString);

or better yet, look into int.TryParse(string)

Raktim Biswas's user avatar

answered Feb 26, 2010 at 19:58

Neil N's user avatar

Neil NNeil N

24.6k16 gold badges85 silver badges144 bronze badges

string varString = "15";
int i = int.Parse(varString);

or

int varI;
string varString = "15";
int.TryParse(varString, out varI);

int.TryParse is safer since if you put something else in varString (for example «fsfdsfs») you would get an exception. By using int.TryParse when string can’t be converted into int it will return 0.

answered Feb 26, 2010 at 20:01

MadBoy's user avatar

MadBoyMadBoy

10.7k23 gold badges93 silver badges155 bronze badges

Do something like:

var result = Int32.Parse(str);

Peter Mortensen's user avatar

answered Feb 26, 2010 at 19:59

Tomas Vana's user avatar

Tomas VanaTomas Vana

18k9 gold badges53 silver badges64 bronze badges

If you are sure that you have «real» number in your string, or you are comfortable of any exception that might arise, use this.

string s="4";
int a=int.Parse(s);

For some more control over the process, use

string s="maybe 4";
int a;
if (int.TryParse(s, out a)) {
    // it's int;
}
else {
    // it's no int, and there's no exception;
}

answered Feb 26, 2010 at 19:58

Daniel Mošmondor's user avatar

Daniel MošmondorDaniel Mošmondor

19.6k12 gold badges57 silver badges98 bronze badges

4 techniques are benchmarked here.

The fastest way turned out to be the following:

y = 0;
for (int i = 0; i < s.Length; i++)
       y = y * 10 + (s[i] - '0');

«s» is your string that you want converted to an int. This code assumes you won’t have any exceptions during the conversion. So if you know your string data will always be some sort of int value, the above code is the best way to go for pure speed.

At the end, «y» will have your int value.

answered Nov 2, 2014 at 13:01

int i;
string whatever;

//Best since no exception raised
int.TryParse(whatever, out i);

//Better use try catch on this one
i = Convert.ToInt32(whatever);

answered Feb 26, 2010 at 20:00

madatanic's user avatar

madatanicmadatanic

1,7603 gold badges16 silver badges28 bronze badges

int i;

string result = Something;

i = Convert.ToInt32(result);

abatishchev's user avatar

abatishchev

96.9k84 gold badges296 silver badges432 bronze badges

answered May 29, 2010 at 6:36

deepu's user avatar

deepudeepu

1,9456 gold badges42 silver badges64 bronze badges

You can use either,

    int i = Convert.ToInt32(myString);

or

    int i =int.Parse(myString);

answered Sep 7, 2015 at 9:43

Deadlock's user avatar

DeadlockDeadlock

4,0231 gold badge20 silver badges25 bronze badges

class MyMath
{
    public dynamic Sum(dynamic x, dynamic y)
    {
        return (x+y);
    }
}

class Demo
{
    static void Main(string[] args)
    {
        MyMath d = new MyMath();
        Console.WriteLine(d.Sum(23.2, 32.2));
    }
}

Tshilidzi Mudau's user avatar

answered Feb 9, 2014 at 22:08

Abdo's user avatar

0

Here is the version of doing it via an Extension Method that has an option to set the default value as well, if the converting fails. In fact, this is what I used to convert a string input to any convertible type:

using System;
using System.ComponentModel;

public static class StringExtensions
{
    public static TOutput AsOrDefault<TOutput>(this string input, TOutput defaultValue = default)
        where TOutput : IConvertible
    {
        TOutput output = defaultValue;

        try
        {
            var converter = TypeDescriptor.GetConverter(typeof(TOutput));
            if (converter != null)
            {
                output = (TOutput)converter.ConvertFromString(input);
            }
        }
        catch { }

        return output;
    }
}

For my usage, I limited the output to be one of the convertible types: https://learn.microsoft.com/en-us/dotnet/api/system.iconvertible?view=net-5.0. I don’t need crazy logics to convert a string to a class, for example.

To use it to convert a string to int:

using FluentAssertions;
using Xunit;

[Theory]
[InlineData("0", 0)]
[InlineData("1", 1)]
[InlineData("123", 123)]
[InlineData("-123", -123)]
public void ValidStringWithNoDefaultValue_ReturnsExpectedResult(string input, int expectedResult)
{
    var result = input.AsOrDefault<int>();

    result.Should().Be(expectedResult);
}

[Theory]
[InlineData("0", 999, 0)]
[InlineData("1", 999, 1)]
[InlineData("123", 999, 123)]
[InlineData("-123", -999, -123)]
public void ValidStringWithDefaultValue_ReturnsExpectedResult(string input, int defaultValue, int expectedResult)
{
    var result = input.AsOrDefault(defaultValue);

    result.Should().Be(expectedResult);
}

[Theory]
[InlineData("")]
[InlineData(" ")]
[InlineData("abc")]
public void InvalidStringWithNoDefaultValue_ReturnsIntegerDefault(string input)
{
    var result = input.AsOrDefault<int>();

    result.Should().Be(default(int));
}

[Theory]
[InlineData("", 0)]
[InlineData(" ", 1)]
[InlineData("abc", 234)]
public void InvalidStringWithDefaultValue_ReturnsDefaultValue(string input, int defaultValue)
{
    var result = input.AsOrDefault(defaultValue);

    result.Should().Be(defaultValue);
}

Here is the version of doing it via an Extension Method that has an option to set the default value as well, if the converting fails. In fact, this is what I used to convert a string input to any convertible type:

using System;
using System.ComponentModel;

public static class StringExtensions
{
    public static TOutput AsOrDefault<TOutput>(this string input, TOutput defaultValue = default)
        where TOutput : IConvertible
    {
        TOutput output = defaultValue;

        try
        {
            var converter = TypeDescriptor.GetConverter(typeof(TOutput));
            if (converter != null)
            {
                output = (TOutput)converter.ConvertFromString(input);
            }
        }
        catch { }

        return output;
    }
}

For my usage, I limited the output to be one of the convertible types: https://learn.microsoft.com/en-us/dotnet/api/system.iconvertible?view=net-5.0. I don’t need crazy logics to convert a string to a class, for example.

To use it to convert a string to int:

using FluentAssertions;
using Xunit;

[Theory]
[InlineData("0", 0)]
[InlineData("1", 1)]
[InlineData("123", 123)]
[InlineData("-123", -123)]
public void ValidStringWithNoDefaultValue_ReturnsExpectedResult(string input, int expectedResult)
{
    var result = input.AsOrDefault<int>();

    result.Should().Be(expectedResult);
}

[Theory]
[InlineData("0", 999, 0)]
[InlineData("1", 999, 1)]
[InlineData("123", 999, 123)]
[InlineData("-123", -999, -123)]
public void ValidStringWithDefaultValue_ReturnsExpectedResult(string input, int defaultValue, int expectedResult)
{
    var result = input.AsOrDefault(defaultValue);

    result.Should().Be(expectedResult);
}

[Theory]
[InlineData("")]
[InlineData(" ")]
[InlineData("abc")]
public void InvalidStringWithNoDefaultValue_ReturnsIntegerDefault(string input)
{
    var result = input.AsOrDefault<int>();

    result.Should().Be(default(int));
}

[Theory]
[InlineData("", 0)]
[InlineData(" ", 1)]
[InlineData("abc", 234)]
public void InvalidStringWithDefaultValue_ReturnsDefaultValue(string input, int defaultValue)
{
    var result = input.AsOrDefault(defaultValue);

    result.Should().Be(defaultValue);
}

Все уроки по C# расположены здесь.

На данном уроке мы объединим типы данных, которые обсуждали до сих пор. Мы поговорим о преобразовании строковых значений в числовые типы. Это необходимо, например, тогда, когда пользователь может вводить любые данные, но требуется работать с ними как с числовыми.

Преобразование строк в числовые типы данных

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

На одном из предыдущих уроков мы обсудили явное и неявное преобразование между числовыми типами с помощью функций приведения. Приведение недоступно при преобразовании между строками и числовыми значениями. Вместо этого Платформа .NET framework предоставляет класс ‘Convert’, специально разработанный для преобразования собственных типов. Числовые типы также предоставляют методы для разбора строк.

Класс Convert

Класс Convert находится в пространстве имен System. Он обеспечивает конвертацию с помощью статических методов. статические методы вызываются без предварительного создания объекта. Другими словами, вам не нужно создавать объект Convert для доступа к требуемым методам.

.NET структура и ключевые слова C#

Одна из сложностей при использовании класса Convert заключается в том, что собственные типы данных C# называются по-другому, чем базовые структуры .NET framework. В следующей таблице перечислены числовые и логические типы данных, описанные в учебнике, и соответствующие имена .NET. Класс Convert использует имена .NET с учетом регистра.

Синтаксис Convert

Статические методы преобразования используют стандартизированный синтаксис. Имя метода начинается с » To «, за которым следует желаемое имя типа данных .NET. Например, чтобы преобразовать строку в float, вызываем метод с названием Convert.ToSingle. Строковое значение, которое необходимо преобразовать, предоставляется в качестве параметра.

// string -> integer
int stringToInt = Convert.ToInt32("25");
 
// string -> decimal
decimal stringToDecimal = Convert.ToDecimal("25.5");
 
// Booleans может быть конвертирован тоже
bool stringToBoolean = Convert.ToBoolean("true");

Примечание: метод Convert может быть использован без ссылки на пространство имен System, поскольку Visual автоматически включает следующую строку в верхней части файла кода

using System;

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

int stringToInt = System.Convert.ToInt32("25");

Числовые преобразования с Convert

Класс Convert также может использоваться для преобразования между числовыми типами. Если число с плавающей точкой преобразуется в целое число, то результат округляется до ближайшего целого числа.. Однако, в отличие от стандартных правил математического округления, если число с плавающей запятой находится ровно на полпути между двумя целыми числами, возвращается ближайшее четное число.

decimal originalValue = 25.5M;
int converted = Convert.ToInt32(originalValue);     // Результат 26
int casted = (int)originalValue;                    // Результат 25

Метод Parse

Также можно конвертировать строки в числа с помощью метода Parse. Это обеспечивает дополнительную гибкость, позволяя разработчику указать стиль преобразовываемого числа. Например, разрешение использования валютных символов или шестнадцатеричных чисел.

Метод Parse является перегруженным, это означает, что существует несколько способов для вызова метода, каждый с различными параметрами. Мы рассмотрим два вида перегрузок в этой статье. Первый принимает один параметр string, содержащий строку для преобразования

string toConvert = "100";
int convertedInt = int.Parse(toConvert);            // Результат 100
float convertedFloat = float.Parse(toConvert);      // Результат 100.0

Использование числовых стилей (Number Styles)

Простой способ вызова Parse, описанный выше, имеет недостаток. Строка должна содержать только цифры. Число, например «£10,000 » вызывает исключение при анализе. Чтобы избежать этого, можно добавить второй параметр для определения допустимых стилей чисел для содержимого строки. Framework обеспечивает перечисление на допустимое количество стилей. Перечисление — это особый тип значения, который содержит именованный набор доступных значений. Перечисления будут подробно описаны дале.

Перечисление NumberStyles определено в System.Globalization. Чтобы избежать необходимости вводить System.Globalization перед каждой ссылкой на numberstyles добавьте директиву using в начало файла кода.

using System.Globalization;

Теперь мы можем использовать NumberStyles перечисления в качестве второго параметра метода Parse.

// Преобразования, включая разделитель тысяч
int thousands = int.Parse("1,000", NumberStyles.AllowThousands);
 
// Преобразование значения в том числе десятичной точки
float withDecimal = float.Parse("5.50", NumberStyles.AllowDecimalPoint);
 
// Преобразование значения в том числе и символ валюты
int withCurrency = int.Parse("£5", NumberStyles.AllowCurrencySymbol);

Значения перечисления NumberStyles могут быть объединены с помощью оператора OR ( | ), что позволяет использовать несколько стилей. Например

float multiple = float.Parse("£5.50", NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);

Перечисление содержит некоторые предопределенные стили. В приведенном выше примере для преобразования значения валюты использовались два стиля. Мы можем использовать опцию валюты из перечисления NumberStyles, чтобы разрешить эти стили и многое другое.

float money = float.Parse("£9,999.99", NumberStyles.Currency);

Интернационализация

.NET framework включает в себя большой объем функций, связанных с интернационализацией. Это просто означает, что возможна разработка программного обеспечения для пользователей по всему миру, с использованием своих локальных настроек для чисел, валют, языков и т.д. Это сложная тема и выходит за рамки текущего учебника по основам языка C#. Вообще говоря, для числовых преобразований вы можете использовать приведенные выше числовые стили для локальных настроек.


Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Уроки по си шарп, си шарп, конвертация

Этот урок посвящен числовым типам и типу Boolean. Рассмотрены вопросы приведения типов, арифметические и логические операции, возможности класса Math и преобразование чисел в строку и обратно.

  • Числовые типы
    • Приведение типов
      • Проверка переполнения
      • Класс System.Convert
    • Арифметические операции
    • Класс Math
      • Функции округления
      • Тригонометрические функции
      • Разное
    • Преобразование числа в строку
    • Преобразование строки в число
      • Класс Convert
      • Методы числовых типов
  • Тип данных Boolean
    • Логические операторы

Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.

Числовые типы

Приведение типов

При работе с числовыми типами данных довольно часто приходится сталкиваться с “расширением” и с “сужением” типа. Для начала рассмотрим несколько примеров:

byte b1 = 100;
short s1 = b1; // расширение типа
Console.WriteLine($"byte value: {b1}, short value: {s1}");

При компиляции этого кода никаких ошибок не будет несмотря на то, что мы присваиваем переменную одного типа (byte) переменной другого типа (short) для целых чисел это делать можно без последствий, так как в данном случае происходит расширение типа. Переменная типа byte может принимать значения из диапазона от -128 до 127, а short из диапазона от -32 768 до 32 767, что значительно превышает ограничения для byte. Таким образом, при присваивании значения переменной типа byte, переменной типа short не происходит потери данных. В обратную сторону это сделать не получится, если вы напишите код, приведенный ниже, то компиляция будет прервана с ошибкой:

short s2 = 100;
byte b2 = s2; // приведет к ошибке компиляции

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

short s2 = 100;
byte b2 = (byte)s2;
Console.WriteLine($"byte value: {b2}, short value: {s2}");

Но имейте ввиду, что такая операция, по своей сути, не является безопасной, так как в этом случае возможно переполнение, что приведет к получению результата, который скорее всего вы не ожидаете:

short s3 = 150;
short s4 = 150;
byte b3 = (byte)(s3 + s4);
Console.WriteLine($"Result: {b3}");

В результате на консоль будет выведено следующее:

Result: 44

Это произошло вследствие того, что сумма s3 и s4 равна 300, а максимальное значение, которое может храниться в byte – это 127.

Проверка переполнения

Если переполнение является критичным моментом для некоторого участка кода вашего приложения, то можете использовать проверку переполнения с помощью ключевого слова checked. Суть его работы заключается в том, что если в рамках контекста, обозначенного через checked происходит переполнение, то будет выброшено исключение OverflowException. Пример использования для одного оператора приведен ниже:

try
{
    short s5 = 150;
    short s6 = 150;
    byte b4 = checked((byte)(s5 + s6));
}
catch(OverflowException)
{
    Console.WriteLine("Overflow is detected!");
}

Если необходимо провести проверку для группы операторов, то используйте checked следующим образом:

try
{
    checked
    {
        short s5 = 150;
        short s6 = 150;
        byte b4 = checked((byte)(s5 + s6));
        byte b5 = checked((byte)(s5 * 100));
    }
}
catch(OverflowException)
{
    Console.WriteLine("Overflow is detected!");
}

В результате выполнения любого из примеров, на консоль будет выведено сообщение:

Overflow is detected!

Для того, чтобы выполнять такого типа проверку для всех вычислений в вашем приложении необходимо активировать эту опцию на этапе компиляции. Если вы работаете в Visual Studio, то  зайдите в свойства проекта, перейти на вкладку Build и нажмите на кнопку “Advanced…”. В результате откроется окно с настройками:

В нем можно поставить (или убрать) галочку в поле “Check for arithmetic overflow/underflow”. Если установить галочку, то все вычисления будут проверяться на переполнение. В таком случае можно отдельно создавать блоки кода, в которых данная проверка производиться не будет, для этого используйте оператор unchecked:

unchecked
{
    short s5 = 150;
    short s6 = 150;
    byte b4 = checked((byte)(s5 + s6));
}

Класс System.Convert

Для приведения типов можно воспользоваться классом System.Convert, который содержит методы для приведения одного типа к другому. Подробная документация по его возможностям приведена в официальной документации.

Приведем несколько примеров его использования. Вариант, когда приведение типа не приводит к переполнению:

short s7 = 100;
byte b6 = System.Convert.ToByte(s7);
Console.WriteLine($"byte value: {b6}, short value: {s7}");

Вариант, когда приведение типа приводит к переполнению, в этом случае будет выброшено исключение:

short s8 = 500;
byte b7 = System.Convert.ToByte(s8);
Console.WriteLine($"byte value: {b7}, short value: {s8}");

Арифметические операции

В таблице ниже перечислены арифметические операции, которые можно выполнять над числовыми типами данных в C#.

Операция Вид Пример
Сложение a + b

Console.WriteLine($”3 + 4={(3 + 4)}”)

Вычитание a – b

Console.WriteLine($”7 – 5={(7 – 5)}”);

Умножение a * b

Console.WriteLine($”2 * 9={(2 * 9)}”);

Деление a / b

Console.WriteLine($”8 / 4={(8 / 4)}”);
Console.WriteLine($”4.5 / 2={(4.5 / 2)}”);

Остаток от деления a % b

Console.WriteLine($”8 % 4={(8 % 4)}”);
Console.WriteLine($”7 % 3={(7 % 3)}”);

Постфиксный инкремент a++ int n1 = 5;
Console.WriteLine($”n1++: {n1++}”);
Console.WriteLine($”n1 = {n1}”);
Префиксный инкремент ++a int n2 = 5;
Console.WriteLine($”++n2: {++n2}”);
Console.WriteLine($”n2 = {n2}”);
Постфиксный декремент a– int n3 = 9;
Console.WriteLine($”n3–: {n3–}”);
Console.WriteLine($”n3 = {n3}”);
Префиксный инкремент –a int n4 = 9;
Console.WriteLine($”–n4: {–n4}”);
Console.WriteLine($”n4 = {n4}”);
Составное присваивание a += b
a -= b
a *= b
a /= b
a % b
int d1 = 10;
int d2 = 3;
d1 += d2;
Console.WriteLine($”d1 += d2: {d1}”);
d1 -= d2;
Console.WriteLine($”d1 -= d2: {d1}”);
d1 *= d2;
Console.WriteLine($”d1 *= d2: {d1}”);
d1 /= d2;
Console.WriteLine($”d1 /= d2: {d1}”);
d1 %= d2;
Console.WriteLine($”d1 %= d2: {d1}”);

Из перечисленных выше арифметических операций, обратите внимание на операции инкремента и декремента. При использовании постфиксного варианта, вначале происходит возврат значения переменной, а потом выполнение операции, для префиксного наоборот.

Класс Math

Класс Math предоставляет реализации распространенных математических функций. Полный список представлен в официальной документации. Ниже будут рассмотрены некоторые из функций класса Math.

Функции округления

Math.Ceiling

Возвращает наименьшее число, которое больше либо равно заданному:

Console.WriteLine(Math.Ceiling(4.5)); // вернет 5

Math.Floor

Возвращает наибольшее число, которое меньше либо равно заданному:

Console.WriteLine(Math.Floor(4.5)); // вернет 4

Math.Round

Округляет число до ближайшего целого значения. Значение посередине округляется до ближайшего четного.

Console.WriteLine(Math.Round(4.7)); // вернет 5
Console.WriteLine(Math.Round(4.5)); // вернет 4           
Console.WriteLine(Math.Round(5.5)); // вернет 6

Тригонометрические функции

Math.Cos

Косинус угла:

Console.WriteLine(Math.Cos(30));

Math.Sin

Синус угла:

Console.WriteLine(Math.Sin(30));

Math.Tan

Тангенс угла:

Console.WriteLine(Math.Tan(30));

Разное

Math.Exp

Возвращает число e в заданной степени:

Console.WriteLine(Math.Exp(Math.E)); // ответ: 1

Math.Log

Если функция вызывается с одним аргументом, то возвращается натуральный логарифм числа:

Console.WriteLine(Math.Log(Math.E)); // ответ: 1

Если с двумя аргументами, то возвращается логарифм числа по заданному основанию:

Console.WriteLine(Math.Log(9, 3));  // ответ: 2

Math.Log10

Возвращает десятичный логарифм числа:

Console.WriteLine(Math.Log10(100)); // ответ: 2

Math.Log2

Возвращает логарифм по основанию 2 от числа:

Console.WriteLine(Math.Log2(128)); // ответ: 7

Math.Pow

Возвращает число, возведенное в заданную степень:

Console.WriteLine(Math.Pow(5, 2)); // ответ: 25

Math.Abs

Возвращает абсолютное значение числа:

Console.WriteLine(Math.Abs(-10)); // ответ: 10

Math.Min

Возвращает наименьшее из переданных чисел:

Console.WriteLine(Math.Min(10, 7)); // ответ: 7

Math.Max

Возвращает наибольшее из переданных чисел:

Console.WriteLine(Math.Max(5, 2)); // ответ: 5

Math.Sign

Возвращает знак числа. Если число положительное, то будет возвращено значение 1, если отрицательное, то -1.

Console.WriteLine(Math.Sign(-2)); // ответ: -1

Преобразование числа в строку

Так как все классы числовых типов в C# являются наследниками от System.Object, то это означает, что у них у всех есть метод ToString(), который переводит численное значение в строковое представление:

Console.WriteLine(123.ToString());
int n5 = 701;
Console.WriteLine(n5.ToString());
Console.WriteLine(5.234.ToString());

Для форматирования строкового представления числа с плавающей точкой используйте Format с соответствующим набором маркеров, пример:

Console.WriteLine(String.Format("{0:0.00}", 123.4567));

Преобразование строки в число

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

Класс Convert

Класс Convert предоставляет набор статических методов для преобразования в базовые типы данных и обратно. Поддерживается следующий набор типов: SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, Boolean, Char, DateTime, String.

Приведем несколько примеров:

int n1 = Convert.ToInt32("123");
int n2 = Convert.ToInt32(true);
Console.WriteLine($"n1 = {n1}, n2 = {n2}");
int n3 = Convert.ToInt32("0x0d", 16);
string s1 = Convert.ToString(n3, 16);
Console.WriteLine($"n3 = {n3}, hex format: n3 = 0x{s1}");

При работе с Convert может происходить:

  • Успешное преобразование.
  • Выброс исключения InvalidCastException, если запрашиваемое преобразование не может быть выполнено. Это может происходить при попытке преобразовать типы Boolean, Double, Decimal, Single, DateTime в Char и обратно, DateTime в не строковый тип и обратно.
  • Выброс исключения FormatException, если преобразование завершается с ошибкой.
  • Выброс исключения OverflowException, если происходит потеря данных при сужении типа (см. Приведение типов).

Класс Convert позволяет работать с разными системами счисления. Поддерживаются двоичное (2), восьмеричное (8), десятичное (10) и шестнадцатеричное (16) основание:

Console.WriteLine($"From bin: {Convert.ToInt32("1111011", 2)}");
Console.WriteLine($"From oct: {Convert.ToInt32("173", 8)}");
Console.WriteLine($"From hex: {Convert.ToInt32("7b", 16)}");

Методы числовых типов

Другим способом преобразования строки в число является использование методов Parse и TryParse, которые предоставляют числовые типы данных. Метод TryParse пытает преобразовать переданную в него строку в число, если это возможно, то полученное значение присваивается второму аргументу с ключевым словом out и возвращает значение true, в ином случае возвращает значение false.

int value;
if(int.TryParse("123", out value))
{
    Console.WriteLine($"Value: {value}");
} // Будет выведено: Value: 123
if(int.TryParse("hello", out value))
{
    Console.WriteLine($"Value: {value}");
}
else
{
    Console.WriteLine("Can't parse string");
} // Будет выведено: Can't parse string

В первом случае преобразование строки “123” в число будет выполнено успешно, во втором нет.

Преобразовать строку в число можно также с помощью метода Parse, если процесс пройдет успешно, то будет возвращено численное значение соответствующего типа, если нет, то будет выброшено исключение ArgumentNullException, ArgumentExceptionFormatException или OverflowException.

Console.WriteLine(int.Parse("123"));
try
{
    int n5 = int.Parse("hello");
}
catch(Exception e)
{
    Console.WriteLine(e.Message);
}

Тип данных Boolean

Экземпляр типа данных Boolean можно создать через объявление либо получить в результате логической операции.

Логические операторы

C# предоставляет следующий набор логических операторов для работы со значениями типа Boolean:

Название Обозначение Пример
Логическое отрицание ! !a
Логическое И & a & b
Логическое исключающее ИЛИ ^ a ^ b
Логическое ИЛИ | a | b
Условный оператор логического И && a && b
Условный оператор логического ИЛИ || a || b

Операторы &, ^, | всегда обрабатывают оба операнда в выражении, операторы && и || вычисляют правый только в случае, если это необходимо.

Ниже приведены примеры использования логических операторов:

bool b1 = true;
bool b2 = !b1; // false
bool b3 = true & b1; // true
bool b4 = false & b1; // true
bool b5 = b1 && b2; // false
bool b6 = b1 || b2; // true
b1 &= true; // true
b1 |= false; // true

Понравилась статья? Поделить с друзьями:
  • Windows forms передача данных между формами
  • Windows forms конструктор формы как открыть
  • Windows forms как работать с графикой
  • Windows forms как открыть другую форму
  • Windows forms как запретить изменять размер окна