Oh, gosh.
No wonder our industry has a bad name.
Tom, here is something for you (and others) to think about.
And verify your instincts.
DECLARE @D DECIMAL (38, 28), @F FLOAT
SET @D = 1.001 SET @F = 1.001
SELECT 0 [Number of Operations],
@D,
SQL_VARIANT_PROPERTY(@D, 'Precision') DecimalPrecision,
SQL_VARIANT_PROPERTY(@D, 'Scale') DecimalScale,
@F,
SQL_VARIANT_PROPERTY(@F, 'Precision') FloatPrecision,
SQL_VARIANT_PROPERTY(@F, 'Scale') FloatScale
UNION
SELECT 1 ,
CONVERT(DECIMAL (38, 28), @D*@D),
SQL_VARIANT_PROPERTY(@D*@D, 'Precision') DecimalPrecision,
SQL_VARIANT_PROPERTY(@D*@D, 'Scale') DecimalScale,
@F*@F,
SQL_VARIANT_PROPERTY(@F*@F, 'Precision') FloatPrecision,
SQL_VARIANT_PROPERTY(@F*@F, 'Scale') FloatScale
UNION
SELECT 2 ,
CONVERT(DECIMAL (38, 28), @D*@D*@D),
SQL_VARIANT_PROPERTY(@D*@D*@D, 'Precision') DecimalPrecision,
SQL_VARIANT_PROPERTY(@D*@D*@D, 'Scale') DecimalScale,
@F*@F*@F,
SQL_VARIANT_PROPERTY(@F*@F*@F, 'Precision') FloatPrecision,
SQL_VARIANT_PROPERTY(@F*@F*@F, 'Scale') FloatScale
UNION
SELECT 3 ,
CONVERT(DECIMAL (38, 28), @D*@D*@D*@D),
SQL_VARIANT_PROPERTY(@D*@D*@D*@D, 'Precision') DecimalPrecision,
SQL_VARIANT_PROPERTY(@D*@D*@D*@D, 'Scale') DecimalScale,
@F*@F*@F*@F,
SQL_VARIANT_PROPERTY(@F*@F*@F*@F, 'Precision') FloatPrecision,
SQL_VARIANT_PROPERTY(@F*@F*@F*@F, 'Scale') FloatScale
_____________
Code for TallyGenerator