如何在SQL中将浮点数转换为字符型

8
我正在进行这项工作。
declare @num float = 7708369000

select  @num as [float], 
    convert(varchar, @num) as [varchar]

它给我这个

float                  varchar
---------------------- ------------------------------
7708369000             7.70837e+009

但我想要这个

float                  varchar
---------------------- ------------------------------
7708369000             7708369000

请帮忙。


1
简单的谷歌搜索“将浮点数格式化为varchar但不使用科学计数法” 结果:http://bytes.com/topic/sql-server/answers/80603-formatting-float-varchar-but-not-scientific-notation - dani herrera
4个回答

27

首先将其转换为十进制,

CAST(CAST(@num AS DECIMAL(20)) AS VARCHAR(20))

3
小数部分怎么处理? - EvAlex
这似乎不正确,因为它截断了小数部分,因此仅适用于小数部分为0的数字。 - CodeCowboyOrg
4
将DECIMAL(20)更改为DECIMAL(20,S),其中S是所需的小数位数。 对于数据类型DECIMAL(P,S),S(比例)必须小于或等于P(精度)。 - Rieekan

8

尝试使用Str函数而不是使用Convert函数

DECLARE @num float = 7708369000;    
SELECT Str(@num);

抱歉之前写错了25和0个参数。上面编辑过的解决方案应该可以正常工作,不会引入任何空格。 - Siddhant Swami
这似乎不正确,因为它截断了小数部分,因此仅适用于小数部分为0的数字。 - CodeCowboyOrg

2

请尝试以下满足您需求的变体(值表示 BigInt 和其他 Max 类型值的最大值)。 http://sqlfiddle.com/#!6/745c8f/1

CREATE TABLE Table1 
(
   FloatDefault float,  --Default is 24 bits giving 7 digit precision and 4 bytes storage
   Float24 float(24),   --Max for 4 bytes storage, 24 bits giving 7 digit precision and 4 bytes storage
   Float53 float(53)    --Max for 8 bytes storage, 53 bits giving 15 digit precision and 8 bytes storage
);

INSERT INTO Table1 VALUES(-9223372036854775808, -9223372036854775808, -9223372036854775808); --Max Negative Value of a Big Int
INSERT INTO Table1 VALUES(9223372036854775807, 9223372036854775807, 9223372036854775807);  --Max Positive Value of a Big Int
INSERT INTO Table1 VALUES(-2147483648, -2147483648, -2147483648); --Max Negative Value of a Big Int
INSERT INTO Table1 VALUES(2147483647, 2147483647, 2147483647);  --Max Positive Value of a Big Int
INSERT INTO Table1 VALUES(123456789012345678901234567890, 123456789012345678901234567890, 123456789012345678901234567890);
INSERT INTO Table1 VALUES(123456789012345678901234567890.12345678, 123456789012345678901234567890.12345678, 123456789012345678901234567890.12345678);
INSERT INTO Table1 VALUES(1234567890, 1234567890, 1234567890);
INSERT INTO Table1 VALUES(1234567890.0123456789, 1234567890.0123456789, 1234567890.0123456789);
INSERT INTO Table1 VALUES(22.0/7.0, 22.0/7.0, 22.0/7.0); -- Value of Pi
INSERT INTO Table1 VALUES(1, 1, 1);
INSERT INTO Table1 VALUES(2.0, 2.0, 2.0);
INSERT INTO Table1 VALUES(2000.0, 2000.0, 2000.0);

SELECT 
   FloatDefault,
   Float24,
   Float53,   
   CAST(CAST(Float53  AS NUMERIC(38)) AS VARCHAR(100)), -- 38 is the max precision 
   CAST(CAST(Float53  AS NUMERIC(38,5)) AS VARCHAR(100)), 
   STR(Float53),
   STR(Float53, 38),
   STR(Float53, 38,5),
   LTRIM(RTRIM(STR(Float53, 38,5))),
   CONVERT(VARCHAR, Float53),
   CONVERT(VARCHAR(100), Float53),
   CONVERT(NUMERIC(38,5), Float53)
FROM Table1
GO

2
使用以下函数:
STR(number, length, decimal)
- number是要转换为字符串的数字值。 - length是结果字符串的长度。默认值为10。 - decimal是要舍入的小数位数。默认值为0。
参考:STR (Transact-SQL)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接