Wenn Sie in einer Division nur Ganzzahlen verwenden, erhalten Sie eine Ganzzahldivision. Wenn Sie (mindestens ein) Double oder Float verwenden, erhalten Sie eine Gleitkommadivision (und die Antwort, die Sie erhalten möchten).
Also kannst du
Deklarieren Sie eine oder beide Variablen als float / double
Wandle eine oder beide Variablen in float / double um.
Setzen Sie das Ergebnis der Ganzzahldivision nicht einfach auf doppelt: Die Division wurde bereits als Ganzzahldivision ausgeführt, sodass die Zahlen hinter der Dezimalstelle bereits verloren gehen.
Danke, Mann. Ihr Code hat mir bei der Beantwortung dieser Frage geholfen - stackoverflow.com/questions/20532187/… Können Sie mir sagen, wie ich die durch diese Multiplikation verursachten zusätzlichen Nullen abschneiden kann? Vielen Dank.
Trojan.ZBOT
2
Wenn Sie es als float oder als Dezimalformat deklarieren, wird es angezeigt
0
nur
Z.B :
declare @weight float;
SET @weight= 47 / 638; PRINT @weight
Ausgabe: 0
Wenn Sie die Ausgabe als möchten
0,073667712
Z.B
declare @weight float;
SET @weight= 47.000000000 / 638.000000000; PRINT @weight
Hum ok, ich verstehe es jetzt, aber die beiden Zahlen, die ich teilen möchte, sind Variablen, und es scheint nicht zu funktionieren, wenn die .0000 nicht in der Variablen angegeben ist.
Roch
Sie müssen also sowohl @ set1 als auch @ set2 umsetzen, um zu schweben :)
anishMarokey
1
In SQL Server gibt die direkte Division von zwei Ganzzahlen eine Ganzzahl zurück, auch wenn das Ergebnis der Gleitkommawert sein sollte. Es gibt unten ein Beispiel, um es zu vermitteln:
Nur der letzte Block gibt den 3.14285714285714 zurück. Trotz des zweiten mit der richtigen Genauigkeit definierten Blocks wird das Ergebnis 3.00000 sein.
Antworten:
Deklarieren Sie entweder set1 und set2 als Floats anstelle von Ganzzahlen oder wandeln Sie sie als Teil der Berechnung in Floats um:
SET @weight= CAST(@set1 AS float) / CAST(@set2 AS float);
quelle
Wenn Sie in einer Division nur Ganzzahlen verwenden, erhalten Sie eine Ganzzahldivision. Wenn Sie (mindestens ein) Double oder Float verwenden, erhalten Sie eine Gleitkommadivision (und die Antwort, die Sie erhalten möchten).
Also kannst du
Setzen Sie das Ergebnis der Ganzzahldivision nicht einfach auf doppelt: Die Division wurde bereits als Ganzzahldivision ausgeführt, sodass die Zahlen hinter der Dezimalstelle bereits verloren gehen.
quelle
Weil es eine ganze Zahl ist. Sie müssen sie als Gleitkommazahlen oder Dezimalstellen deklarieren oder in der Berechnung in solche umwandeln.
quelle
Multiplizieren Sie einfach den unteren Teil der Division mit 1,0 (oder so vielen Dezimalstellen, wie Sie möchten).
PRINT @set1 PRINT @set2 SET @weight= @set1 / @set2 *1.00000; PRINT @weight
quelle
Wenn Sie es als float oder als Dezimalformat deklarieren, wird es angezeigt
nur
Z.B :
declare @weight float; SET @weight= 47 / 638; PRINT @weight
Ausgabe: 0
Wenn Sie die Ausgabe als möchten
Z.B
declare @weight float; SET @weight= 47.000000000 / 638.000000000; PRINT @weight
quelle
In SQL Server gibt die direkte Division von zwei Ganzzahlen eine Ganzzahl zurück, auch wenn das Ergebnis der Gleitkommawert sein sollte. Es gibt unten ein Beispiel, um es zu vermitteln:
--1-- declare @weird_number_float float set @weird_number_float=22/7 select @weird_number_float --2-- declare @weird_number_decimal decimal(18,10) set @weird_number_decimal=22/7 select @weird_number_decimal --3-- declare @weird_number_numeric numeric set @weird_number_numeric=22/7 select @weird_number_numeric --Right way declare @weird_number float set @weird_number=cast(22 as float)/cast(7 as float) select @weird_number
Nur der letzte Block gibt den 3.14285714285714 zurück. Trotz des zweiten mit der richtigen Genauigkeit definierten Blocks wird das Ergebnis 3.00000 sein.
quelle