Es folgt die hier Regeln: Precision, Scale, and Length (Transact-SQL) - msdn
Wenn Sie die maximale Präzision verwenden, nicht in der Lage ist, den Maßstab, ohne riskieren zu verlieren Präzision einzustellen.
Chart for Data Type Conversion (Database Engine) - msdn
Wenn Sie eine float
in Ihre Berechnungen eingeführt, würden Sie eine float
Rückkehr bekommen.
Standardmäßig werden Werte mit einer Dezimalzahl implizit in dezimale/numerische Datentypen umgewandelt. Diese impliziten Konvertierungen werden als 'und'
in einem Beispiel aus Ihrer Frage geändert markiert:
select
undefined=0.1 + 0.01
,[18,1+18,2] = (cast(0.1 as numeric(18,1)))+(cast(0.01 as numeric (18,2)))
,[und+18,2+18,1] = 0.1 + (cast(0.01 as numeric (18,2)))
,[18,2+und]=(cast(0.1 as numeric(18,1)))+ 0.01
,[38,1+38,2]=(cast(0.1 as numeric(38,1)))+(cast(0.01 as numeric (38,2)))
,[und+38,2] = 0.1 + (cast(0.01 as numeric (38,2)))
,[38,1+und]=(cast(0.1 as numeric(38,1)))+ 0.01
,[38,1+float]=(cast(0.1 as numeric(38,1)))+ convert(float,0.01)
rextester Demo: http://rextester.com/ULVRGS77309
kehrt:
+-----------+-----------+---------------+----------+-----------+----------+----------+------------+
| undefined | 18,1+18,2 | und+18,2+18,1 | 18,2+und | 38,1+38,2 | und+38,2 | 38,1+und | 38,1+float |
+-----------+-----------+---------------+----------+-----------+----------+----------+------------+
| 0,11 | 0,11 | 0,11 | 0,11 | 0,1 | 0,11 | 0,1 | 0,11 |
+-----------+-----------+---------------+----------+-----------+----------+----------+------------+
http://dba.stackexchange.com/a/ 41745/95107 und Sie werden bemerken, da Sie nur 2 Präzision verwenden, die Verwendung von 37 für die Waage wird die gleichen Ergebnisse wie 18 zurückgeben – scsimon