Tu ne peux pas.
Bien sûr, vous pourrait Cependant, un int (System.Int32) n'est pas assez grand pour contenir toutes les valeurs décimales possibles.
Cela signifie que si vous intégrez une décimale supérieure à int.MaxValue, vous déborderez, et si la décimale est inférieure à int.MinValue, elle débordera.
Que se passe-t-il en cas de sous-débit ou de débordement ? Il y a deux possibilités. Si votre compilation n'est pas vérifiée (c'est-à-dire que le CLR ne se soucie pas de ce que vous faites), votre application continuera après le débordement/sous-débordement de la valeur, mais la valeur de l'int ne sera pas celle que vous attendiez. Cela peut conduire à des bogues intermittents et peut être difficile à corriger. Votre application se retrouvera dans un état inconnu, ce qui peut entraîner la corruption des données importantes sur lesquelles elle travaille. Ce n'est pas bon.
Si votre assemblage est vérifié (properties->build->advanced->check for arithmetic overflow/underflow ou l'option de compilation /checked), votre code lèvera une exception lorsqu'un under/overflow se produira. C'est probablement mieux que rien ; cependant, la valeur par défaut des assemblages n'est pas de vérifier le dépassement de capacité.
La vraie question est "qu'essayez-vous de faire ?". Sans connaître vos besoins, personne ne peut vous dire ce que vous devez faire. devrait dans ce cas, autre que l'évident : ne le faites pas.
Si vous vous en fichez, les réponses données ici sont valables. Cependant, vous devriez communiquer que vous comprenez qu'un dépassement de capacité peut se produire et que cela n'a pas d'importance en enveloppant votre code coulé dans une balise non vérifié bloc
unchecked
{
// do your conversions that may underflow/overflow here
}
De cette façon, les personnes qui viennent derrière vous comprennent que vous ne vous en souciez pas, et si, à l'avenir, quelqu'un modifie vos builds en /checked, votre code ne sera pas cassé de manière inattendue.
Si Si vous souhaitez simplement supprimer la partie fractionnaire du nombre, en laissant la partie intégrale, vous pouvez utiliser Math.Truncate.
decimal actual = 10.5M;
decimal expected = 10M;
Assert.AreEqual(expected, Math.Truncate(actual));
13 votes
Il serait utile de savoir si vous souhaitez arrondir à l'unité la plus proche ou simplement laisser tomber les chiffres après la décimale (c'est-à-dire toujours arrondir au chiffre inférieur).