Это может произойти, если ваши десятичные значения на самом деле плавающие.Вот репродукция:
DECLARE @test TABLE (line INT, amount FLOAT);
INSERT INTO @test VALUES
(1, 6.525),
(2, 6.524999999999999);
SELECT line, amount, FORMAT(amount, 'G17') AS dotnet_g17_formatted, ROUND(amount, 2) AS amount2
FROM @test
Результат:
| line | amount | dotnet_g17_formatted | amount2 |
|------|--------|----------------------|---------|
| 1 | 6.525 | 6.5250000000000004 | 6.53 |
| 2 | 6.525 | 6.5249999999999986 | 6.52 |
Вы можете видеть, что значения с плавающей запятой сохраняются как приблизительные значения и отображаются как таковые.
Наиболее подходящийРешение состоит в том, чтобы хранить финансовые значения как DECIMAL
.