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

admin

Преобразования типов

В программировании нередко значения переменных одного типа присваиваются переменным другого типа. Например, в приведенном ниже фрагменте кода целое значение типа int присваивается переменной с плавающей точкой типа float:

Если в одной операции присваивания смешиваются совместимые типы данных, то значение в правой части оператора присваивания автоматически преобразуется в тип, указанный в левой его части. Поэтому в приведенном выше фрагменте кода значение переменной i сначала преобразуется в тип float, а затем присваивается переменной f. Но вследствие строгого контроля типов далеко не все типы данных в C# оказываются полностью совместимыми, а следовательно, не все преобразования типов разрешены в неявном виде. Например, типы bool и int несовместимы. Правда, преобразование несовместимых типов все-таки может быть осуществлено путем приведения. Приведение типов, по существу, означает явное их преобразование.

Автоматическое преобразование типов

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

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

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

    Обратите внимание на то, что метод Sum() ожидает поступления двух параметров типа int. Тем не менее, в методе Main() ему на самом деле передаются две переменных типа short. Хотя это может показаться несоответствием типов, программа будет компилироваться и выполняться без ошибок и возвращать в результате, как и ожидалось, значение 25.

    Причина, по которой компилятор будет считать данный код синтаксически корректным, связана с тем, что потеря данных здесь невозможна. Поскольку максимальное значение (32767), которое может содержать тип short, вполне вписывается в рамки диапазона типа int (максимальное значение которого составляет 2147483647), компилятор будет неявным образом расширять каждую переменную типа short до типа int. Формально термин «расширение» применяется для обозначения неявного восходящего приведения (upward cast), которое не приводит к потере данных.

    Приведение несовместимых типов

    Несмотря на всю полезность неявных преобразований типов, они неспособны удовлетворить все потребности в программировании, поскольку допускают лишь расширяющие преобразования совместимых типов. А во всех остальных случаях приходится обращаться к приведению типов. Приведение — это команда компилятору преобразовать результат вычисления выражения в указанный тип. А для этого требуется явное преобразование типов. Ниже приведена общая форма приведения типов:

    Здесь целевой_тип обозначает тот тип, в который желательно преобразовать указанное выражение.

    Если приведение типов приводит к сужающему преобразованию, то часть информации может быть потеряна. Например, в результате приведения типа long к типу int часть информации потеряется, если значение типа long окажется больше диапазона представления чисел для типа int, поскольку старшие разряды этого числового значения отбрасываются. Когда же значение с плавающей точкой приводится к целочисленному, то в результате усечения теряется дробная часть этого числового значения. Так, если присвоить значение 1,23 целочисленной переменной, то в результате в ней останется лишь целая часть исходного числа (1), а дробная его часть (0,23) будет потеряна. Давайте рассмотрим пример:

    Результатом работы данной программы будет:

    Обратите внимание, что переменная i1 корректно преобразовалась в тип short, т.к. ее значение входит в диапазон этого типа данных. Преобразование переменной dec в тип int вернуло целую часть этого числа. Преобразование переменной i2 вернуло значение переполнения 18964 (т.е. 84500 — 2*32768).

    Перехват сужающих преобразований данных

    В предыдущем примере приведение переменной i2 к типу short не является приемлемым, т.к. возникает потеря данных. Для создания приложений, в которых потеря данных должна быть недопустимой, в C# предлагаются такие ключевые слова, как checked и unchecked, которые позволяют гарантировать, что потеря данных не окажется незамеченной.

    По умолчанию, в случае, когда не предпринимается никаких соответствующих исправительных мер, условия переполнения (overflow) и потери значимости (underflow) происходят без выдачи ошибки. Обрабатывать условия переполнения и потери значимости в приложении можно двумя способами. Это можно делать вручную, полагаясь на свои знания и навыки в области программирования.

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

    К счастью, в C# предусмотрено ключевое слово checked. Если оператор (или блок операторов) заключен в контекст checked, компилятор C# генерирует дополнительные CIL-инструкции, обеспечивающие проверку на предмет условий переполнения, которые могут возникать в результате сложения, умножения, вычитания или деления двух числовых типов данных.

    В случае возникновения условия переполнения во время выполнения будет генерироваться исключение System.OverflowException. Давайте рассмотрим пример, в котором будем передавать в консоль значение исключения:

    Результат работы данной программы:

    Настройка проверки на предмет возникновения условий переполнения в масштабах проекта

    Если создается приложение, в котором переполнение никогда не должно проходить незаметно, может выясниться, что обрамлять ключевым словом checked приходится раздражающе много строк кода. На такой случай в качестве альтернативного варианта в компиляторе C# поддерживается флаг /checked. При активизации этого флага проверки на предмет возможного переполнения будут автоматически подвергаться все имеющиеся в коде арифметические операции, без применения для каждой из них ключевого слова checked. Обнаружение переполнения точно так же приводит к генерации соответствующего исключения во время выполнения.

    Для активизации этого флага в Visual Studio 2010 необходимо открыть страницу свойств проекта, перейти на вкладку Build (Построение), щелкнуть на кнопке Advanced (Дополнительно) и в открывшемся диалоговом окне отметить флажок Check for arithmetic overflow/underflow (Проверять арифметические переполнения и потери точности):

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

    Итак, чтобы подвести итог по использованию в C# ключевых слов checked и unchecked, следует отметить, что по умолчанию арифметическое переполнение в исполняющей среде .NET игнорируется. Если необходимо обработать отдельные операторы, то должно использоваться ключевое слово checked, а если нужно перехватывать все связанные с переполнением ошибки в приложении, то понадобится активизировать флаг /checked. Что касается ключевого слова unchecked, то его можно применять при наличии блока кода, в котором переполнение является допустимым (и, следовательно, не должно приводить к генерации исключения во время выполнения).

    Роль класса System.Convert

    В завершении темы преобразования типов данных стоит отметить, что в пространстве имен System имеется класс Convert, который тоже может применяться для расширения и сужения данных:

    professorweb.ru

    Приведение и преобразование типов (Руководство по программированию на C#) Casting and Type Conversions (C# Programming Guide)

    В этой статье

    Поскольку код C# является статически типизированным во время компиляции, после объявления переменной ее нельзя объявить повторно или использовать для хранения значений другого типа, если этот тип не преобразуется в тип переменной. Because C# is statically-typed at compile time, after a variable is declared, it cannot be declared again or used to store values of another type unless that type is convertible to the variable’s type. Например, отсутствует преобразование из целого числа в произвольную строку. For example, there is no conversion from an integer to any arbitrary string. Поэтому после объявления i как целого числа нельзя назначить ей строку «Hello», как показано в следующем коде. Therefore, after you declare i as an integer, you cannot assign the string «Hello» to it, as is shown in the following code.

    Тем не менее иногда может потребоваться скопировать значение в переменную или параметр метода другого типа. However, you might sometimes need to copy a value into a variable or method parameter of another type. Например, может потребоваться передать целочисленную переменную в метод, параметр которого имеет тип double . For example, you might have an integer variable that you need to pass to a method whose parameter is typed as double . Или может понадобиться присвоить переменную класса переменной типа интерфейса. Or you might need to assign a class variable to a variable of an interface type. Такого рода операции называются преобразованиями типа. These kinds of operations are called type conversions. В C# можно выполнять следующие виды преобразований. In C#, you can perform the following kinds of conversions:

    Неявные преобразования: никакой специальный синтаксис не требуется, поскольку преобразование является строго типизированным и данные не будут потеряны. Implicit conversions: No special syntax is required because the conversion is type safe and no data will be lost. Примеры включают преобразования из меньших в большие целочисленные типы и преобразования из производных классов в базовые классы. Examples include conversions from smaller to larger integral types, and conversions from derived classes to base classes.

    Явные преобразования (приведения): явные преобразования требуют оператора приведения. Explicit conversions (casts): Explicit conversions require a cast operator. Приведение требуется, если в ходе преобразования данные могут быть утрачены или преобразование может завершиться сбоем по другим причинам. Casting is required when information might be lost in the conversion, or when the conversion might not succeed for other reasons. Типичными примерами являются числовое преобразование в тип с меньшей точностью или меньшим диапазоном и преобразование экземпляра базового класса в производный класс. Typical examples include numeric conversion to a type that has less precision or a smaller range, and conversion of a base-class instance to a derived class.

    Заданные пользователем преобразования: пользовательские преобразования выполняются специальными методами, которые можно определить для включения явных и неявных преобразований между пользовательскими типами, не имеющими отношения «базовый класс-производный класс». User-defined conversions: User-defined conversions are performed by special methods that you can define to enable explicit and implicit conversions between custom types that do not have a base class–derived class relationship. Дополнительные сведения см. в разделе Операторы преобразования. For more information, see Conversion Operators.

    Преобразования с использованием вспомогательных классов. Чтобы выполнить преобразование между несовместимыми типами, например целыми числами и объектами System.DateTime или шестнадцатеричными строками и массивами байтов, можно использовать классы System.BitConverter и System.Convert, а также методы Parse встроенных числовых типов, такие как Int32.Parse. Conversions with helper classes: To convert between non-compatible types, such as integers and System.DateTime objects, or hexadecimal strings and byte arrays, you can use the System.BitConverter class, the System.Convert class, and the Parse methods of the built-in numeric types, such as Int32.Parse. Дополнительные сведения см. в разделе Практическое руководство. Преобразование массива байтов в значение типа int, Практическое руководство. Преобразование строки в число и Практическое руководство. Преобразование из шестнадцатеричных строк в числовые типы. For more information, see How to: Convert a byte Array to an int, How to: Convert a String to a Number, and How to: Convert Between Hexadecimal Strings and Numeric Types.

    Неявные преобразования Implicit Conversions

    Для встроенных числовых типов неявное преобразование можно выполнить, если сохраняемое значение может уместиться в переменной без усечения или округления. For built-in numeric types, an implicit conversion can be made when the value to be stored can fit into the variable without being truncated or rounded off. Например, переменная типа long (8-байтное целое число) может хранить любое значение, которое может хранить переменная int (4 байта в 32-разрядных системах). For example, a variable of type long (8 byte integer) can store any value that an int (4 bytes on a 32-bit computer) can store. В следующем примере компилятор неявно преобразует значение справа в тип long перед назначением его bigNum . In the following example, the compiler implicitly converts the value on the right to a type long before assigning it to bigNum .

    Полный список всех неявных числовых преобразований см. в разделе Таблица неявных числовых преобразований. For a complete list of all implicit numeric conversions, see Implicit Numeric Conversions Table.

    Для ссылочных типов неявное преобразование всегда предусмотрено из класса в любой из его прямых или косвенных базовых классов или интерфейсов. For reference types, an implicit conversion always exists from a class to any one of its direct or indirect base classes or interfaces. Никакой специальный синтаксис не требуется, поскольку производный класс всегда содержит все члены базового класса. No special syntax is necessary because a derived class always contains all the members of a base class.

    Явные преобразования Explicit Conversions

    Тем не менее если преобразование нельзя выполнить без риска потери данных, компилятор требует выполнения явного преобразования, которое называется приведением. However, if a conversion cannot be made without a risk of losing information, the compiler requires that you perform an explicit conversion, which is called a cast. Приведение — это способ явно указать компилятору, что необходимо выполнить преобразование и что вам известно, что может произойти потеря данных. A cast is a way of explicitly informing the compiler that you intend to make the conversion and that you are aware that data loss might occur. Чтобы выполнить приведение, укажите тип, в который производится приведение, в круглых скобках перед преобразуемым значением или переменной. To perform a cast, specify the type that you are casting to in parentheses in front of the value or variable to be converted. В следующей программе выполняется приведение типа double в int. Программа не будет компилироваться без приведения. The following program casts a double to an int. The program will not compile without the cast.

    Список разрешенных явных числовых преобразований см. в разделе Таблица явных числовых преобразований. For a list of the explicit numeric conversions that are allowed, see Explicit Numeric Conversions Table.

    Для ссылочных типов явное приведение является обязательным, если необходимо преобразовать базовый тип в производный тип: For reference types, an explicit cast is required if you need to convert from a base type to a derived type:

    Операция приведения между ссылочными типами не меняет тип времени выполнения базового объекта; изменяется только тип значения, который используется в качестве ссылки на этот объект. A cast operation between reference types does not change the run-time type of the underlying object; it only changes the type of the value that is being used as a reference to that object. Дополнительные сведения см. в разделе Полиморфизм. For more information, see Polymorphism.

    Исключения преобразования типов во время выполнения Type Conversion Exceptions at Run Time

    В некоторых преобразованиях ссылочных типов компилятор не может определить, будет ли приведение допустимым. In some reference type conversions, the compiler cannot determine whether a cast will be valid. Есть вероятность, что правильно скомпилированная операция приведения завершится сбоем во время выполнения. It is possible for a cast operation that compiles correctly to fail at run time. Как показано в следующем примере, приведение типа, завершившееся сбоем во время выполнения, вызывает исключение InvalidCastException. As shown in the following example, a type cast that fails at run time will cause an InvalidCastException to be thrown.

    C# предоставляет операторы is и as, чтобы можно было проверить совместимость перед фактическим выполнением приведения. C# provides the is and as operators to enable you to test for compatibility before actually performing a cast. Дополнительные сведения см. в разделе Практическое руководство. Безопасное приведение с помощью операторов as и is. For more information, see How to: Safely Cast by Using as and is Operators.

    Спецификация языка C# C# Language Specification

    Дополнительные сведения см. в спецификации языка C#. For more information, see the C# Language Specification. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#. The language specification is the definitive source for C# syntax and usage.

    См. также See Also

    Обратная связь

    Мы бы хотели узнать ваше мнение. Укажите, о чем вы хотите рассказать нам.

    docs.microsoft.com

    IT1300: Императивное программирование

    Помимо операций присваивания, преобразование типов происходит и в самих выражениях. В выражении можно свободно смешивать два или более типа данных, при условии их совместимости друг с другом. Например, в одном выражении допускается применение типов short и long , поскольку оба типа являются числовыми. Когда в выражении смешиваются разные типы данных, они преобразуются в один и тот же тип по порядку следования операций.

    Преобразования типов выполняются по принятым в C# правилам продвижения типов. Ниже приведен алгоритм, определяемый этими правилами для операций с двумя операндами.

    ЕСЛИ один операнд имеет тип decimal , ТО и второй операнд продвигается к типу decimal (но если второй операнд имеет тип float или double , результат будет ошибочным).

    ЕСЛИ один операнд имеет тип double , ТО и второй операнд продвигается к типу double .

    ЕСЛИ один операнд имеет тип float , ТО и второй операнд продвигается к типу float .

    ЕСЛИ один операнд имеет тип ulong , ТО и второй операнд продвигается к типу ulong (но если второй операнд имеет тип sbyte , short , int или long , результат будет ошибочным).

    ЕСЛИ один операнд имеет тип long , ТО и второй операнд продвигается к типу long .

    ЕСЛИ один операнд имеет тип uint , а второй — тип sbyte , short или int , ТО оба операнда продвигаются к типу long .

    ЕСЛИ один операнд имеет тип uint , ТО и второй операнд продвигается к типу uint .

    ИНАЧЕ оба операнда продвигаются к типу int .

    Относительно правил продвижения типов необходимо сделать ряд важных замечаний. Во-первых, не все типы могут смешиваться в выражении. В частности, неявное преобразование типа float или double в тип decimal невозможно, как, впрочем, и смешение типа ulong с любым целочисленным типом со знаком. Для смешения этих типов требуется явное их приведение.

    Во-вторых, особого внимания требует последнее из приведенных выше правил. Оно гласит: если ни одно из предыдущих правил не применяется, то все операнды продвигаются к типу int . Следовательно, все значения типа char , sbyte , byte , ushort и short продвигаются к типу int в целях вычисления выражения. Такое продвижение типов называется целочисленным. Это также означает, что результат выполнения всех арифметических операций будет иметь тип не ниже int .

    Следует иметь в виду, что правила продвижения типов применяются только к значениям, которыми оперируют при вычислении выражения. Так, если значение переменной типа byte продвигается к типу int внутри выражения, то вне выражения эта переменная по-прежнему относится к типу byte . Продвижение типов затрагивает только вычисление выражения.

    Но продвижение типов может иногда привести к неожиданным результатам. Если, например, в арифметической операции используются два значения типа byte , то происходит следующее. Сначала операнды типа byte продвигаются к типу int . А затем выполняется операция, дающая результат типа int . Следовательно, результат выполнения операции, в которой участвуют два значения типа byte , будет иметь тип int . Но ведь это не тот результат, который можно было бы с очевидностью предположить. Рассмотрим следующий пример программы.

    Как ни странно, но когда результат вычисления выражения b*b присваивается обратно переменной b , то возникает потребность в приведении к типу byte! Объясняется это тем, что в выражении b * b значение переменной b продвигается к типу int и поэтому не может быть присвоено переменной типа byte без приведения типов. Имейте это обстоятельство в виду, если получите неожиданное сообщение об ошибке несовместимости типов в выражениях, которые, на первый взгляд, кажутся совершенно правильными.

    Аналогичная ситуация возникает при выполнении операций с символьными операндами. Например, в следующем фрагменте кода требуется обратное приведение к типу char , поскольку операнды ch1 и сh2 в выражении продвигаются к типу int .

    Без приведения типов результат сложения операндов ch1 и сh2 будет иметь тип int , и поэтому его нельзя присвоить переменной типа char .

    Продвижение типов происходит и при выполнении унарных операций, например с унарным минусом. Операнды унарных операций более мелкого типа, чем int ( byte , sbyte , short и ushort ), т.е. с более узким диапазоном представления чисел, продвигаются к типу int . То же самое происходит и с операндом типа char . Кроме того, если выполняется унарная операция отрицания значения типа uint , то результат продвигается к типу long .

    it.rfei.ru

    Преобразование типов в Java

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего «Самоучителя по Java»
  • Преобразование типов — это тема, которая может показаться сложной начинающим программировать на Java. Однако, заверим Вас, на самом деле всё просто. Главное понять по каким законам происходит взаимодействие между переменными и помнить об этом при написании программ. Итак, давайте разбираться.

    В Java существует 2 типа преобразований — картинка Вам в помощь:

    Напомним, что вся «Вселенная Java» состоит из:

  • примитивных типов (byte, short, int, long, char, float, double, boolean)
  • объектов
  • В данной статье мы:

    • рассмотрим преобразование типов для примитивных типов переменных
    • преобразование объектов (String, Scanner и др.) в этой статье не рассматривается, поскольку с объектами происходит отдельная «магия» — это тема для отдельной статьи.
    • Автоматическое преобразование

      Ну, что ж, давайте попробуем разобраться что такое «автоматическое преобразование».

      Помните, когда мы рассматривали типы переменных (в статье «Переменные в Java. Создание переменной»), мы говорили, что переменная — это некоторый «контейнер» , в котором может храниться значение для дальнейшего использования в программе. Также мы говорили о том, что каждый тип переменной имеет свой диапазон допустимых значений и объем занимаемой памяти. Вот она табличка, где это все было расписано:

      Так вот, к чему мы, собственно говоря, клоним. К тому, что совсем не просто так Вам давались диапазоны допустимых значений и объем занимаемой памяти ?

      Давайте, сравним, например:

      1. byte и short. byte имеет меньший диапазон допустимых значений, чем short. То есть byte это как бы коробочка поменьше, а short — это коробочка побольше. И значит, мы можем byte вложить в short.

      2. byte и int . byte имеет меньший диапазон допустимых значений, чем int. То есть byte это как бы коробочка поменьше, а int — это коробочка побольше. И значит, мы можем byte вложить в int.

      3. int и long. int имеет меньший диапазон допустимых значений, чем long. То есть int это как бы коробочка поменьше, а long — это коробочка побольше. И значит, мы можем int вложить в long.

      Это и есть пример автоматического преобразования. Это можно схематически изобразить в виде вот такой картинки:

      Давайте рассмотрим как это работает на практике.

      Пример №1

      Код №1 — если Вы запустите это код на своем компьютере, в консоли будет выведено число 15

      vertex-academy.com

      Преобразования типов и безопасность типов (современный C++)

      Опубликовано: Июль 2016

      Самая актуальная документация по Visual Studio 2017: Документация по Visual Studio 2017.

      В этом документе определяет общие проблемы преобразования типов и описание можно избежать их в коде C C++.

      При написании программы C++, важно убедиться, что является типобезопасным. Это означает, что каждая переменная, аргумент функции и возвращаемое значение функции в допустимый тип данных, что и операции, которые содержат значения различных типов «иметь» и не приводят к потере данных, неверная интерпретацию битовых шаблонов или повреждение памяти. Программа, которая никогда не явно или неявно преобразует значения из одного типа в другой является типобезопасным по определению. Однако преобразование типов, даже небезопасные преобразования, иногда не требуются. Например, можно сохранить результат операции с плавающей запятой в переменной типа int , или можно передать значение в неподписанном int с функцией, которая принимает со int . Оба примерах показаны небезопасные преобразования, поскольку они могут привести к потере данных или переинтерпретацию значение.

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

      Если выражение содержит операнды различных встроенных типов, и никакие явные приведения отсутствуют, компилятор использует встроенную стандартные преобразования для преобразования одного из операторов, чтобы типы совпадают. Компилятор пытается преобразования в чёткой последовательности до тех пор, пока он не будет успешен. Если выбранное преобразование повышение, компилятор не выдает предупреждение. Если преобразование narrowing, компилятор выдает предупреждение о возможной потере данных. Фактически, происходит потеря данных зависит от используемых фактических значений, но рекомендуется рассматривает предупреждения как ошибки. Если пользовательский тип включен, компилятор пытается использовать преобразования, определенных в определении класса. Если не удается найти приемлемое преобразование, компилятор выдает ошибку и не компилируют программы. Дополнительные сведения о правила, управляющие стандартными преобразованиями, см. в разделе Стандартные преобразования. Определенное пользователем преобразование Дополнительные сведения о см. в разделе Заданные пользователем преобразования.

      Расширяющие преобразования (повышение)

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

      msdn.microsoft.com

      Это интересно:

      • Неофициально плачу алименты pravobalt.ru style=» float:=»» left;=»» margin:=»» 0=»» 10px=»» 5px=»» 0;»=»» src=»» alt=»Плачу алименты с пенсии военного работаю неофициально»> Алименты с военнослужащего Консультации юристов по законодательству России Может ли мать подать на алименты если она на пенсии и работает? […]
      • Приказ 837 мвд рф Опубликован Приказ МВД РФ № 707 от 6 сентября 2017 г. Министр внутренних дел Владимир Колокольцев 6 сентября 2017 года подписал Приказ № 707 от 6.09.2017 года О внесении изменений в нормативные правовые акты МВД России по вопросам регистрационно-экзаменационной […]
      • Досрочное назначение пенсии в 2018 году Досрочная пенсия Кому положена досрочная пенсия в 2018 году? В России гражданин получает возможность выйти на пенсию при наступлении, установленного законом пенсионного возраста (мужчины — 60 лет, женщины — 55). Однако, в некоторых случаях, предусмотренных законодательством, возможен […]
      • Заявление ростелеком на отключение телефона Как отказаться от домашнего телефона Ростелеком В современном мире стационарный аппарат постепенно уходит на второй план. Его место занимают мобильники и смартфоны. Этому способствуют многие причины: повышение абонентской платы, удобство мобильной связи, которая в месяц обходится […]
      • Аудит налога на прибыль Аудит налога на прибыль: последовательность проведения и оформление результатов При подсчете и уплате налогов компании и государство являются заинтересованными лицами и в спорных ситуациях у каждого из них своя правда. Поэтому и действует система налогового аудита, в том числе и для […]
      • Карта кукуруза кредитный лимит оформить Карта Кукуруза — онлайн заявка на кредит в Евросеть Получить кредит можно не только через банк или МФО, поскольку сейчас доступен популярный продукт Евросети – карта Кукуруза. С ее помощью можно получить займ от ведущих российских банков, а также постоянно пользоваться скидками на товары […]
      • Налог 13 за квартиру Можно ли пенсионеру вернуть подоходный налог 13% с покупки квартиры? Жильё можно построить, или, к примеру, принять в дар, а также можно купить. Существуют различные варианты приобретения, то есть: единовременный расчёт или ипотечная программа кредитования. И можно обнаружить применимую […]
      • Отдел по субсидиям автозаводского района Субсидии на оплату ЖКУ Порядок предоставления субсидий по оплате жилого помещения и коммунальных услуг. Категории граждан, имеющих право на субсидию по оплате жилого помещения и коммунальных услуг: Получателями жилищной субсидии могут быть граждане, соответствующие […]