水晶报表显示.00问题

时间:2022-02-11 11:38:32
水晶报表中大于0小于1的时候只显示小数点后面的,而不显示小数点前面的0,例如:应该显示为0.00,但是显示为.00,如何解决?
1、我说的解决方案不是通过控制面板的区域与语言选项那里更改,因为我发现这种情况在windows2003系统上根本不起作用。
2、通过自定义格式也还是这样显示

6 个解决方案

#1


方法一:用字符形式显示

在报表新建一公式x1:

StringVar str := ToText({数字字段}) //转成字符串
If Left(str,1) = '.' Then
 str := '0' + str
Else
 str

把公式字段x1替换原数字字段

方法二:
水晶报表显示.00问题

#2


方法一为什么提示“剩余文本不是公式的一部分”?
出错的代码是后四行
If Left(str,1) = '.' Then
 str := '0' + str
Else
 str

#3


引用 2 楼 sayboss 的回复:
方法一为什么提示“剩余文本不是公式的一部分”?
出错的代码是后四行
If Left(str,1) = '.' Then
 str := '0' + str
Else
 str


StringVar str := ToText({数字字段}) ; //Crystal语法每条语句后要跟一分号

大意了 :(

#4


有3种

1:通过控制面板>>区域设置>>数字,这种是最不可靠的,因为你可以改自己的机器, 别的机器可能不会给你改的权限
2:我前面发的那个图的方法。使用这种方法在个别系统环境下,确实0也补不上去。
3:3楼luols的思路,我来完善一下
其实我在一些项目中也在用这个,因为有的项目是AIX/Linux环境,而且操作权限极小。
以下是一个水晶报表函数,使用Basic语法,可兼容所有平台。

[code=VBScrip]'将数字格式化为带分割符号的 v1是待处理的,v2表示小数点位数
Function FormatNumber (v1 as number ,v2 as number)
       '先把小数点摘出来
    Dim s1 As String, sa1 as string,sa2 as string,s2 As String, s3 As String
    Dim i As Number, j As Number
 
    s1=Cstr(v1,v2)
'先把原来可能有的,清理掉
s1=Replace(s1,",","")
    '分离小数部分和整数部分
    If instr(s1,".")>0 then
        sa1=Split(s1,".")(1)
        sa2=Split(s1,".")(2)  
    Else
        sa1=s1
        sa2=""
    End If
    '如果整数部分长度小于3,则直接跳出
    if Len(sa1)<=3 then 
        FormatNumber=s1
        Exit Function
    End If

        For i = Len(sa1) To 1 Step -3
            j = j + 1
            'MsgBox i
            If i - 2 > 0 Then
                If j = 1 Then
                    s3 = Mid(sa1, i - 2, 3)
                Else
                    s3 = Mid(sa1, i - 2, 3) & "," & s3
                End If
            Else
                s3 = Left(sa1, Len(s1) Mod 3) & "," & s3
            End If
            
        Next
s3=Replace(s3,",,",",")
    If sa2="" then  
        FormatNumber=s3
    Else
        FormatNumber=s3 & "." & sa2
    End If
End Function[/code]

参考

#5


我在交叉表中显示一个数字,使用自定义格式起始零不起作用。
修改区域和选项也只对图标有作用。
我用水晶报表2008.

#6


我也遇到了,但是设置它的属性就可以了。如图:
水晶报表显示.00问题

蓝色标识的地方改成 true

#1


方法一:用字符形式显示

在报表新建一公式x1:

StringVar str := ToText({数字字段}) //转成字符串
If Left(str,1) = '.' Then
 str := '0' + str
Else
 str

把公式字段x1替换原数字字段

方法二:
水晶报表显示.00问题

#2


方法一为什么提示“剩余文本不是公式的一部分”?
出错的代码是后四行
If Left(str,1) = '.' Then
 str := '0' + str
Else
 str

#3


引用 2 楼 sayboss 的回复:
方法一为什么提示“剩余文本不是公式的一部分”?
出错的代码是后四行
If Left(str,1) = '.' Then
 str := '0' + str
Else
 str


StringVar str := ToText({数字字段}) ; //Crystal语法每条语句后要跟一分号

大意了 :(

#4


有3种

1:通过控制面板>>区域设置>>数字,这种是最不可靠的,因为你可以改自己的机器, 别的机器可能不会给你改的权限
2:我前面发的那个图的方法。使用这种方法在个别系统环境下,确实0也补不上去。
3:3楼luols的思路,我来完善一下
其实我在一些项目中也在用这个,因为有的项目是AIX/Linux环境,而且操作权限极小。
以下是一个水晶报表函数,使用Basic语法,可兼容所有平台。

[code=VBScrip]'将数字格式化为带分割符号的 v1是待处理的,v2表示小数点位数
Function FormatNumber (v1 as number ,v2 as number)
       '先把小数点摘出来
    Dim s1 As String, sa1 as string,sa2 as string,s2 As String, s3 As String
    Dim i As Number, j As Number
 
    s1=Cstr(v1,v2)
'先把原来可能有的,清理掉
s1=Replace(s1,",","")
    '分离小数部分和整数部分
    If instr(s1,".")>0 then
        sa1=Split(s1,".")(1)
        sa2=Split(s1,".")(2)  
    Else
        sa1=s1
        sa2=""
    End If
    '如果整数部分长度小于3,则直接跳出
    if Len(sa1)<=3 then 
        FormatNumber=s1
        Exit Function
    End If

        For i = Len(sa1) To 1 Step -3
            j = j + 1
            'MsgBox i
            If i - 2 > 0 Then
                If j = 1 Then
                    s3 = Mid(sa1, i - 2, 3)
                Else
                    s3 = Mid(sa1, i - 2, 3) & "," & s3
                End If
            Else
                s3 = Left(sa1, Len(s1) Mod 3) & "," & s3
            End If
            
        Next
s3=Replace(s3,",,",",")
    If sa2="" then  
        FormatNumber=s3
    Else
        FormatNumber=s3 & "." & sa2
    End If
End Function[/code]

参考

#5


我在交叉表中显示一个数字,使用自定义格式起始零不起作用。
修改区域和选项也只对图标有作用。
我用水晶报表2008.

#6


我也遇到了,但是设置它的属性就可以了。如图:
水晶报表显示.00问题

蓝色标识的地方改成 true