2

首先,我需要提到我当前的 sybase db 版本是Adaptive Server Enterprise 12.5.4varchar我的目标是通过 sybase convert 函数将浮点数据类型转换concat为这些变量中的几种,格式化并存储为字符串类型。

不幸的是,事实并非如此。简单地使用convert(varchar(20), float_var)orcast()函数不能正确返回精确值。

例如, ...

declare @float_var float
begin
    select @float_var =345.1237    --from table actually
    select convert(varchar(20),@float_var)     --return 345.1236999999
end

返回的错误字符串结果偶尔会有9999900001后缀。

我尝试了许多功能,包括指定精度,但仍有一些情况无法解决。sybase 内部函数并不完全适用于它。

我想这是使用 Sybase DB 时的一个常见问题,但是在 serach 中找到的答案很少。在我过去的经验中,Sybase 存储过程游戏玩家总是在运行时具有某种容忍度,并在遇到错误时进行内部修复。这个问题让我对 Sybase 内部的工作方式感到困惑。任何建议将不胜感激,在此先感谢。

4

2 回答 2

2

有几个可能的解决方案。

首先,让我们先尝试将浮点数转换为十进制,然后再转换为 varchar。

select cast(cast(@float_var as decimal(13,4)) as varchar)

或者,这就是我的 ASE 记忆可能会让我失望的地方,就像这样使用 STR 函数:

Select ltrim(str(@float_var, 25, 5))

您必须修剪输出作为 STR 函数在结果左侧填充空格

于 2013-02-01T06:10:12.590 回答
1

这对我有用:

declare @float_var float
begin
    select @float_var = 96.332 
    select cast(cast(@float_var as decimal(13,4)) as varchar)     -- Returns 96.3320
end

declare @float_var float
begin
    select @float_var = 345.1237
    select cast(cast(@float_var as decimal(13,4)) as varchar)     -- Returns 345.1237
end
于 2013-02-04T08:24:40.653 回答