水晶报表动态显示小数位
2010-07-02 10:54
288 查看
水晶报表中动态显示小数位收藏
水晶报表中动态显示小数位
大家都知道,在水晶报表里,小数点的保留是个比较讨厌的问题。因为在数字字段的格式化中,小数点格式化的位数是固定的。也就是说要么保留两位,要么保留三位……,要么一位都不保留。其实在很多时候,客户更希望的是服务器端是几位就保留几位。曾经有N 个人问过我这个问题如何解决,今天又有人问了,干脆写了一个函数解决这个问题,以后再有客户有这样的需求,直接套用这个函数就行了。
其实我以前也说过,解决这个问题有一个方法就是在服务器端直接把这个数字字段转换成字符型,这样在水晶报表这边就不需要做任何处理了。但是这种办法有个不好的地方就是要去改服务器端视图,这样有可能会影响其他业务的操作。虽然可以创建一个新的视图来在它基础上做此报表,但是为了一个字段而新建个视图有时候也比较郁闷。
另外一个办法就是在水晶报表中添加一个公式字段,对那个数字字段进行处理。思路就是先把这个字段转换成字符型,然后把小数点后面多余的0去掉。水晶报表有个数字转换字符的函数“ToText”,这里就有一个问题,这个函数可恶之处就是它必须要指定小数位数,如果不指定,它就保留两位小数。如果非要指定那就指定吧,但是它又说了,小数不能超过10位,“ToText(123.456, 11)”是通不过的,真是昏死!
水晶报表中的函数代码如下:
Local StringVar strTemp := ToText({FLEX_PURCH_REQ_REP\.ORIGINAL_QTY},10);
Local NumberVar i;
Local StringVar str := "";
Local NumberVar strLen := Length (strTemp);
For i := strLen To 1 Step -1 Do
(
If strTemp[i] = "." Then
( //Integer,we should delete the point
str := Left(strTemp, i-1);
Exit For
)
Else If strTemp[i] <> "0" then
(
str := Left(strTemp, i);
Exit For
)
);
//Leading Zero
If str[1] = "." Then
(
str := "0"+str;
);
Str
在使用的时候,只要新建一个公式,把上面代码拷贝进去,然后修改一下要转换的字段(蓝色字)就可以了。这里有个要注意的地方是:不能转换超过10位小数的数字,这是水晶报表的限制,在水晶报表客户端没有办法解决。我们到数字字段的格式化里去看,那里也最多格式化10位。如果将来真要有家客户需要保留10位以上小数,我们只好还是采用第一种方法 ―― 改服务器端视图。
水晶报表中动态显示小数位
大家都知道,在水晶报表里,小数点的保留是个比较讨厌的问题。因为在数字字段的格式化中,小数点格式化的位数是固定的。也就是说要么保留两位,要么保留三位……,要么一位都不保留。其实在很多时候,客户更希望的是服务器端是几位就保留几位。曾经有N 个人问过我这个问题如何解决,今天又有人问了,干脆写了一个函数解决这个问题,以后再有客户有这样的需求,直接套用这个函数就行了。
其实我以前也说过,解决这个问题有一个方法就是在服务器端直接把这个数字字段转换成字符型,这样在水晶报表这边就不需要做任何处理了。但是这种办法有个不好的地方就是要去改服务器端视图,这样有可能会影响其他业务的操作。虽然可以创建一个新的视图来在它基础上做此报表,但是为了一个字段而新建个视图有时候也比较郁闷。
另外一个办法就是在水晶报表中添加一个公式字段,对那个数字字段进行处理。思路就是先把这个字段转换成字符型,然后把小数点后面多余的0去掉。水晶报表有个数字转换字符的函数“ToText”,这里就有一个问题,这个函数可恶之处就是它必须要指定小数位数,如果不指定,它就保留两位小数。如果非要指定那就指定吧,但是它又说了,小数不能超过10位,“ToText(123.456, 11)”是通不过的,真是昏死!
水晶报表中的函数代码如下:
Local StringVar strTemp := ToText({FLEX_PURCH_REQ_REP\.ORIGINAL_QTY},10);
Local NumberVar i;
Local StringVar str := "";
Local NumberVar strLen := Length (strTemp);
For i := strLen To 1 Step -1 Do
(
If strTemp[i] = "." Then
( //Integer,we should delete the point
str := Left(strTemp, i-1);
Exit For
)
Else If strTemp[i] <> "0" then
(
str := Left(strTemp, i);
Exit For
)
);
//Leading Zero
If str[1] = "." Then
(
str := "0"+str;
);
Str
在使用的时候,只要新建一个公式,把上面代码拷贝进去,然后修改一下要转换的字段(蓝色字)就可以了。这里有个要注意的地方是:不能转换超过10位小数的数字,这是水晶报表的限制,在水晶报表客户端没有办法解决。我们到数字字段的格式化里去看,那里也最多格式化10位。如果将来真要有家客户需要保留10位以上小数,我们只好还是采用第一种方法 ―― 改服务器端视图。
相关文章推荐
- 水晶报表动态显示小数位数
- 动态控制水晶报表中数字栏位的值显示的小数位数
- 水晶报表中动态显示小数位
- 水晶报表动态显示小数点后的位数(去掉多余的0)
- 水晶报表中显示动态图片
- 水晶报表 动态控制图片显示 Changing pictures dynamically in Crystal Report
- 水晶报表动态表数据显示的问题
- 解决水晶报表中动态加载的图片或利用水晶报表创建的图表不显示图片的方法
- 【水晶报表之图片篇-b】 CR 11以下版本动态显示图片(数据库保存图片路径)
- 水晶报表显示动态图片
- 水晶报表中动态保留数字字段小数位
- C#水晶报表显示sqlserver2000储存的图片 C#水晶报表动态显示sqlserver储存的图片
- 水晶报表中动态保留数字字段小数位
- 在水晶报表中动态显示任意格式的图片
- 巧用锐浪报表:用报表脚本实现动态显示小数位数
- 求助水晶报表动态饼图显示、求助进行数据查询和把查询结果用图表比较出来
- vb.net使用水晶报表显示动态Dataset的数据
- 关于管理系统或水晶报表显示小数是没有起零的问题
- 水晶报表中动态显示图片
- 如何在水晶报表中动态显示任意格式的图片?