SELECT FOR JSON 输出浮点指数

SELECT FOR JSON outputs exponent on floating points

当我执行以下查询时:

DECLARE @KG FLOAT = 5.0;

WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight;

我得到这个输出:

| KG | LB           |
|----|--------------|
| 5  | 11.023113109 |

现在当我简单地将 FOR JSON AUTO 附加到输出 JSON,

DECLARE @KG FLOAT = 5.0;
    
WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight FOR JSON AUTO;

我得到以下输出:

[{"KG":5.000000000000000e+000,"LB":1.102311310900000e+001}]

我知道以上是有效的 JSON,但我想要的输出是:

[{"KG":5,"LB":11.023113109}]

重要说明:我意识到我可以通过简单地将 @KG 声明为 DECIMALINT 来获得所需的输出。我宁愿不这样做,因为我是从我没有编辑权限的 VIEW 中选择的,而且我不想单独将每个 FLOAT 列转换为 DECIMAL 如果可能的话。

有没有办法不将每个单独的值强制转换为 DECIMAL

你应该使用 exact numeric datatypes:

DECLARE @KG DECIMAL(38,12) = 5.0;

WITH Weight(KG, LB) AS (SELECT @KG, @KG * 2.2046226218)
SELECT * FROM Weight FOR JSON AUTO;

DbFiddle Demo