J'essaie de déterminer la meilleure façon de tronquer ou de supprimer des décimales supplémentaires dans SQL sans arrondir. Par exemple:
declare @value decimal(18,2)
set @value = 123.456
Ce arrondit automatiquement @value
d'être 123.46
, ce qui est bon dans la plupart des cas. Cependant, pour ce projet, je n'en ai pas besoin. Existe-t-il un moyen simple de tronquer les décimales dont je n'ai pas besoin? Je sais que je peux utiliser la left()
fonction et reconvertir en décimale. Y a-t-il d'autres moyens?
sql
sql-server
tsql
rounding
Ryan Eastabrook
la source
la source
Lorsque le troisième paramètre ! = 0, il tronque plutôt qu'arrondit
http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx
Syntaxe
Arguments
numeric_expression
Expression de la catégorie de type de données numérique exacte ou approximative, à l'exception du type de données bit.length
Est la précision à laquelle expression_numérique doit être arrondie. longueur doit être une expression de type tinyint, smallint ou int. Lorsque la longueur est un nombre positif, expression_numérique est arrondie au nombre de positions décimales spécifiées par la longueur. Lorsque la longueur est un nombre négatif, expression_numérique est arrondie sur le côté gauche du séparateur décimal, comme spécifié par la longueur.function
Est le type d'opération à effectuer. la fonction doit être tinyint, smallint ou int. Lorsque la fonction est omise ou a une valeur de 0 (par défaut), expression_numérique est arrondie. Lorsqu'une valeur autre que 0 est spécifiée, expression_numérique est tronquée.la source
la source
Voici comment j'ai pu tronquer et non arrondir:
renvoie 100,0010
Et votre exemple:
renvoie 123,450
Maintenant, si vous voulez vous débarrasser du zéro final, il suffit de le lancer:
renvoie 123,45
la source
En fait, quel que soit le troisième paramètre, 0 ou 1 ou 2, il n’arrondira pas votre valeur.
la source
Round a un paramètre facultatif
la source
Voulez-vous la décimale ou non?
Sinon, utilisez
Si vous le faites avec 0, faites un tour:
la source
Un autre tronqué sans solution ni exemple d'arrondi.
la source
Floor()
lequel est le chemin à parcourir pour supprimer des décimales sans arrondir en effet. Dommage que Floor () n'ait pas de second paramètre pour indiquer à quelle position. Mais je pense que le * 10) / 10 fonctionne très bien.Cela supprimera la partie décimale de tout nombre
la source
Vous donnerait 2 valeurs après la virgule décimale. (SERVEUR MS SQL)
la source
Une autre façon est la
ODBC TRUNCATE
fonction:LiveDemo
Production:
Remarque:
Je recommande d'utiliser la
ROUND
fonction intégrée avec le 3e paramètre réglé sur 1.la source
Je sais que c'est assez tard mais je n'y vois pas de réponse et j'utilise cette astuce depuis des années.
Soustrayez simplement 0,005 de votre valeur et utilisez Round (@ num, 2).
Votre exemple:
renvoie 123,45
Il ajustera automatiquement l'arrondi à la valeur correcte que vous recherchez.
Au fait, recréez-vous le programme à partir du film Office Space?
la source
Veuillez essayer d'utiliser ce code pour convertir 3 valeurs décimales après un point en 2 décimales:
La sortie est 123,46
la source
Je pense que vous ne voulez que la valeur décimale, dans ce cas, vous pouvez utiliser ce qui suit:
la source
Je sais que cette question est vraiment ancienne mais personne n'a utilisé de sous-chaînes pour arrondir. Ceci comme avantage la possibilité d'arrondir des nombres très longs (limite de votre chaîne dans SQL Server qui est généralement de 8000 caractères):
la source
Je pense que nous pouvons aller beaucoup plus facilement avec un exemple de solution plus simple trouvé dans Hackerrank:
La solution ci-dessus vous donne une idée de la façon de limiter la valeur à 4 décimales. Si vous souhaitez réduire ou augmenter les nombres après la décimale, remplacez simplement 4 par ce que vous voulez.
la source
Mod(x,1)
est la façon la plus simple, je pense.la source
la source