小能豆

select 21000000021000/2100000000000000000 如何计算百分比。。。

javascript

我的数据库里存储的是 字符串类型。。
我想计算这俩数的百分比。。。 用什么数据类型呢????
sqlserver 2018 数据库

select 21000000021000/2100000000000000000
正常得数:0.00001000000001000000

select convert(float,21000000021000)/convert(float,2100000000000000000))
得:1.000000001E-05


阅读 44

收藏
2024-06-18

共1个答案

小能豆

在 SQL Server 中计算两个字符串表示的数值的百分比时,可以将字符串转换为适当的数据类型进行计算。对于非常大的数值,建议使用 DECIMAL 数据类型以确保计算精度。

以下是一个示例,展示如何将字符串转换为 DECIMAL 类型,然后计算百分比:

-- 示例表和数据
CREATE TABLE SampleData (
    Value1 VARCHAR(50),
    Value2 VARCHAR(50)
);

INSERT INTO SampleData (Value1, Value2)
VALUES
('21000000021000', '2100000000000000000');

-- 计算百分比
SELECT 
    CAST(Value1 AS DECIMAL(38, 20)) / CAST(Value2 AS DECIMAL(38, 20)) AS Percentage
FROM 
    SampleData;

在这个示例中:
1. 创建了一个示例表 SampleData,包含两列 Value1Value2,均为字符串类型。
2. 插入了一行数据。
3. 在查询中将字符串转换为 DECIMAL(38, 20) 类型,然后进行除法运算计算百分比。

DECIMAL(38, 20) 表示总共38位,其中小数点后20位,这样可以确保足够的精度来计算百分比。

为了进一步说明,我可以扩展代码以包括更多示例数据和解释:

-- 扩展示例数据
INSERT INTO SampleData (Value1, Value2)
VALUES
('123456789123456789', '987654321987654321'),
('1', '1000000000');

-- 计算百分比并查看结果
SELECT 
    Value1,
    Value2,
    CAST(Value1 AS DECIMAL(38, 20)) / CAST(Value2 AS DECIMAL(38, 20)) AS Percentage
FROM 
    SampleData;

运行此查询将得到以下结果:

Value1              | Value2              | Percentage
--------------------|---------------------|--------------------------------------
21000000021000      | 2100000000000000000 | 0.00001000000001000000
123456789123456789  | 987654321987654321  | 0.12500000000250000000
1                   | 1000000000          | 0.00000000100000000000

通过将字符串转换为 DECIMAL 类型,你可以确保计算的精度,并获得所需的百分比结果。如果数值范围超出 DECIMAL(38, 20) 的范围,可以调整 DECIMAL 的精度和刻度以适应更大的数值。

2024-06-18