我遇到了以下解决方案,但它不适用于Sybase
HierarchicalLDA hlda = new HierarchicalLDA();
hlda.initialize(instances, instances, 5, new Randoms());
hlda.estimate(1000);
hlda.printState(new PrintWriter(new File("Data.txt")));
我已阅读Convert Sybase信息,但仍然收到相同号码,但没有逗号。
答案 0 :(得分:1)
Here is the SP i created based on F Karam suggestion.
CREATE FUNCTION "DBA"."formattednumber"( in @number numeric)
returns char(60)
begin
declare @returnnumber char(60);
declare @workingnumber char(60);
declare @n_ind char(1);
declare @decimalnumber char(10);
declare @tempnumber char(60);
declare @decimalpos integer;
if isnull(@number,'') = '' then
return null
end if;
if @number < 0 then set @n_ind = 'Y'
else set @n_ind = 'N'
end if;
set @workingnumber = convert(char(60),ABS(@number));
set @decimalpos = patindex('%.%',@workingnumber);
if @decimalpos > 0 then
set @decimalnumber = substr(@workingnumber,@decimalpos);
set @decimalnumber = "left"(@decimalnumber,3+1);
set @workingnumber = "left"(@workingnumber,@decimalpos-1)
end if end if;
set @returnnumber = '';
while length(@workingnumber) > 3 loop
set @tempnumber = "right"(@workingnumber,3);
set @returnnumber = insertstr(0,@returnnumber,@tempnumber);
set @workingnumber = "left"(@workingnumber,length(@workingnumber)-3);
if length(@workingnumber) > 0 then
set @returnnumber = insertstr(0,@returnnumber,',')
end if
end loop;
if length(@workingnumber) > 0 then
set @returnnumber = insertstr(0,@returnnumber,@workingnumber)
end if;
if length(@decimalnumber) > 0 then
set @returnnumber = @returnnumber+@decimalnumber
end if;
if @n_ind = 'Y' then set @returnnumber = '-' || @returnnumber
end if;
return(@returnnumber)
end;
答案 1 :(得分:0)
您是否尝试过以varchar(20)为例?类似的东西:
SELECT CONVERT(varchar(20), CAST(987654321 AS money), 1)
在SqlAnywhere中,money数据类型是一个域,实现为NUMERIC(19,4)。
在CAST函数中,如果未指定字符串类型的长度,则数据库服务器会选择适当的长度。如果既没有为DECIMAL转换指定精度也没有指定比例,则数据库服务器会选择适当的值。
所以也许这就是造成这个问题的原因,你得到什么作为输出?你得到987654321.00
,还是987654321
?
更新:
我的最后一个建议是使用insertstr()
函数并循环遍历您的数字的char值,每3位数字插入逗号..这不是最干净/最简单的方法,但显然SQLAnywhere处理money数据类型为正常NUMERIC数据类型......
insertstr()
文档为here。
我会给你一个代码示例,但是我没有安装SQLAnywhere来测试它......
答案 2 :(得分:0)
您需要区分服务器端和客户端格式。例如,当您使用'isql'客户端(TDS客户端)时,结果将是:
1> select convert(money, 9876543210)
2> go
9876543210
------------------------
9,876,543,210.00
(1 row affected)
但这纯粹是因为客户端应用程序碰巧以这种方式格式化“货币”价值。此外,这实际上并不特定于SQLA,因为isql最初是ASE(不同的Sybase数据库)的客户端工具。
当您在SQLA服务器上运行相同的转换时(即作为SQL语句中表达式的一部分),由于SQLA没有这种内置格式化样式,因此这些逗号不会出现。 如果你想要这个,你应该编写一个SQL函数来根据需要格式化数字。