This is the reason use should not use FLOAT. It is a approximate datatype. Always use DECIMAL or NUMERIC datatypr
DECLARE @ExchangeRate NUMERIC(22, 6) = 22450,
@TotalAmt NUMERIC(22, 6) = 16593.67,
@ExchangeRate1 FLOAT = 22450,
@TotalAmt1 FLOAT = 16593.67
SELECT numeric_result = Round(@ExchangeRate * @TotalAmt, 0), --Correct
float_result = Round(@ExchangeRate1 * @TotalAmt1, 0), --Incorrect
converted_numeric_result= Round(Cast(@ExchangeRate1 AS NUMERIC(22, 6))
* Cast(@TotalAmt1 AS NUMERIC(22, 6)), 0) --Correct
when you select @ExchangeRate1 * @TotalAmt1 it gives 372527891.49999994 but @ExchangeRate * @TotalAmt gives 372527891.5.
Result :
╔════════════════╦═══════════════╦══════════════════════════╗
║ numeric_result ║ float_result ║ converted_numeric_result ║
╠════════════════╬═══════════════╬══════════════════════════╣
║ 372527892 ║ 372527891 ║ 372527892 ║
╚════════════════╩═══════════════╩══════════════════════════╝