Как преобразовать десятичное число в int в C#?
Вы не можете.
Конечно, вы .net-framework могли, однако int (System.Int32) недостаточно decimals велик для хранения всех возможных decimal десятичных значений.
Это означает, что decimals если вы укажете десятичное c# число, которое больше int.MaxValue, вы c#.net переполнитесь, а если десятичное c#-language число меньше int.MinValue, оно .net будет недостаточным.
Что происходит dot-net при недостаточном / переполнении? Одно c#-language из двух. Если ваша сборка c#.net не отмечена (т.е. CLR не .cs-file заботится, если вы это сделаете), ваше int приложение продолжит работу c#-language после того, как значение csharp over / underflows, но значение c#-language в int будет не таким, как int вы ожидали. Это может приводить csharp к периодическим ошибкам, и c-sharp их трудно исправить. Вы закончите dotnet свое приложение в неизвестном dot-net состоянии, что может привести dot-net к тому, что ваше приложение csharp повредит все важные данные, над decimals которыми оно работает. Не c#.net очень хорошо.
Если ваша сборка c#.net отмечена (свойства-> сборка-> расширенный-> проверка visual-c# арифметического переполнения visual-c# / потери значимости или параметр c-sharp компилятора / checked), ваш visual-c# код выдаст исключение при c#.net возникновении недостаточного visual-c# / переполнения. Это, наверное, лучше, чем dotnet нет; однако по умолчанию c#.net для сборок не проверяется int переполнение / недополнение.
Настоящий c# вопрос - «что вы пытаетесь c#.net сделать?» Не зная ваших требований, никто c# не может сказать вам, что c# вы должны делать в этом случае, кроме decimals очевидного: НЕ ДЕЛАЙТЕ ЭТО.
Если csharp вас это особо не волнует, ответы .net-framework здесь верны. Однако вы должны csharp сообщить о своем понимании того, что .cs-file может произойти переполнение decimals и что это не имеет значения, заключив c#-language код приведения в непроверенный блок
unchecked
{
// do your conversions that may underflow/overflow here
}
Таким decimals образом, люди, идущие за int вами, понимают, что вам все dotnet равно, и если в будущем кто-то dot-net изменит ваши сборки на / checked, ваш c# код неожиданно не сломается.
Если все, что c# вам нужно сделать, это отбросить csharp дробную часть числа, оставив decimals целую часть, вы можете использовать .cs-file Math.Truncate.
decimal actual = 10.5M;
decimal expected = 10M;
Assert.AreEqual(expected, Math.Truncate(actual));
c#
.net
int
decimal
Как преобразовать десятичное число в int в C#?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.