Meilleure façon d'obtenir un nombre entier d'une partie d'un nombre Décimal
Quelle est la meilleure façon de retourner le nombre entier le cadre d'une virgule (en c#)? (Cela a fonctionne pour un très grand nombre qui ne peut pas entrer dans un int).
GetIntPart(343564564.4342) >> 343564564
GetIntPart(-323489.32) >> -323489
GetIntPart(324) >> 324
Le but de cela est la suivante: je suis pour l'insertion dans une décimale (30,4) champ dans la base de données, et vous voulez vous assurer que je n'essayez pas d'insérer un certain nombre de est trop long pour le champ. Détermination de la longueur de l'ensemble de la partie numéro de la décimale est le cadre de cette opération.
- Vous ne pouvez pas obtenir l'int de la partie, vous pouvez obtenir le nombre entier de la partie et le fossé de la partie fractionnaire. L'ensemble de la partie nombre de Décimales peut facilement dépassement de capacité d'un int, et soit de les lancer ou de les enrouler autour de, silencieusement de tuer votre code.
- Eh bien, c'est pourquoi cette question n'est pas aussi simple qu'il y paraît. J'ai besoin de ce travail pour un très grand nombre de manière aussi fiable que pour les petits nombres. Cependant, "nombre entier" est plus précis que "int" - je vais reformuler ci-dessus.
Vous devez vous connecter pour publier un commentaire.
Par la façon dont les gars, (int)Décimal.MaxValue débordement. Vous ne pouvez pas obtenir le "int" partie d'une virgule, car la virgule est trop friggen gros pour mettre dans l'int de la boîte. Viens de vérifier... c'est encore trop gros pour une longue (Int64).
Si vous voulez les bits d'une valeur Décimale à la GAUCHE du point, vous avez besoin pour ce faire:
et le retour de la valeur... UNE VIRGULE ou un DOUBLE.
edit: Truncate est certainement le bon fonctionnement!
Je pense que Système.Les mathématiques.Tronquer est ce que vous cherchez.
Dépend de ce que vous faites.
Par exemple:
ou
La valeur par défaut est toujours la première, qui peut être une surprise, mais prend tout son sens.
Votre cast explicite fera:
De la façon dont vous avez formulé la question, il semble que cela n'est pas ce que vous voulez - vous voulez étage à chaque fois.
Je ferais:
Également vérifier la taille de votre
decimal
- ils peuvent être assez grand, alors vous pouvez avoir besoin d'utiliser unlong
.Vous avez juste besoin de lancer, en tant que tel:
Si vous voulez continuer à l'utiliser comme une virgule dans les calculs ultérieurs, puis les Mathématiques.Truncate (ou, éventuellement, de faire des Mathématiques.Étage si vous voulez un certain comportement pour les nombres négatifs) est la fonction que vous voulez.
Moyen très facile à séparer de la valeur et de sa partie décimale de la valeur.
s est partie fractionnaire = 5 et
i est la valeur as integer = 3
(int)Decimal.MaxValue
débordement.Je l'espère, vous aider.
decimal
est beaucoup plus grande que celle deint
. Aussi, ce n'est pas un VB question.