-1
votes

Erreur: Erreur de débordement arithmétique Conversion numérique en Type de données numérique

Je reçois une erreur:

Erreur de débordement arithmétique Conversion numérique en Type de données numérique sur le code ci-dessous. xxx

Comment obtenir la conduite de cette erreur?


6 commentaires

As-tu une question?


Sûrement la première chose à suivre consiste à utiliser les mauvais types de données partout. Si vous voulez faire des mathématiques, pourquoi vos points de départ et de fin nvarchar ?


@DAMIEN_THE_UNBELIEVER, il pourrait y avoir du caractère dans @A & @T, sur la base des cas fera les mathématiques, donc le type de données sélectionné comme Nvarchar.


@Kam je pose déjà une réponse à votre question, mais n'est toujours pas clair ce que vous essayez de faire vraiment, si l'une des réponses affichées résolvez votre problème, alors considérez-le à la mise en place et à l'accepter, sinon modifiez votre question. Pour nous dire exactement qu'essayez-vous de faire.


@Sami, merci sami !! Il a été effacé dans le 1er commentaire. J'essayais de donner la clarification sur le type de données uniquement.


@Kam que vous envisagez d'accepter une réponse à votre question.


4 Réponses :


0
votes

Vous devez augmenter la valeur de précision supérieure. Essayez de changer comme ceci:

declare @A as   nvarchar(100)   --will be Nvarchar only
    declare @T as   nvarchar(100)     --will be Nvarchar only
    declare @Act as nvarchar(100) --will be Nvarchar only
    set @A ='750000'
    set @T ='552000'

    SELECT  @Act = cast(cast(cast(@A  AS decimal(18, 2)) -cast( @T AS decimal(18, 4)) 
    /cast(@T AS decimal(18, 4)) AS decimal(18, 4)) * 100 AS numeric(18, 4))

    print @Act


0 commentaires

0
votes

Il donne une erreur parce que

La longueur totale du nombre que vous avez fournie est supérieure à dix.

Vous pouvez modifier votre code comme indiqué ci-dessous indiqué ci-dessous 10, 4 à 18, 4 . xxx < p> Sa valeur est plus que la limite maximale de sorte qu'il donne une exception.


0 commentaires

1
votes

Tout d'abord, pourquoi utilisez-vous le mauvais type de données et faites-vous du mal pour vous, vous devez toujours utiliser le type de données approprié.

donc au lieu de varchar Pourquoi n'utilise pas Décimal , toujours ici est la requête depuis votre question est comment obtenir la conduite de cette erreur xxx

pas besoin de lancer < code> comme numérique (10, 4) et vous devez lancer vers varchar car vous vous attribuez la valeur à une variable variable de Varcharne, non numérique.

Votre requête sera facile si vous modifiez les types de données, par exemple: xxx

ou si vous souhaitez lancer le résultat sous forme numérique (10, 4) xxx


0 commentaires

0
votes

Si je comprends votre logique correctement, ce que vous voulez faire avec: xxx

est ce calcul simple: xxx

alors, Dans votre cas, vous devez lancer @act comme numérique (12, 4) , parce que vous avez plusieurs par 100. Votre résultat sera le suivant: 74999900.0000 .

Je ne suis pas sûr, mais je pense que vous voulez probablement calculer: xxx

même alors, en règle générale, considérez toujours le gamme de vos calculs mathématiques et utilisez le type de données numérique approprié pour vos variables.


0 commentaires