可变十进制数字

时间:2009-08-14 15:30:07

标签: crystal-reports

我在自定义样式 - >小数

中放入以下公式

Local stringVar strCadena:= ToText(cdbl({ado.ValorCliente}) - Truncate({ado.ValorCliente},0)); 长度(strCadena) - 2

但该报告为此操作设置了2位小数(2等于我计算机的“区域设置”中配置的设置) cdbl({ado.ValorCliente}) - 截断({ado.ValorCliente},0)

有没有办法避免区域设置?

提前致谢。 TALO

4 个答案:

答案 0 :(得分:1)

我也有这个问题,这是我使用的公式:

 if InStrRev(ToText({#Sum00}), ".") = 0 then
     0
 else 
     Length(Replace(TrimRight(Replace(Split(ToText({#Sum00},8), ".")[2],"0"," "))," ","0"))

丑陋但最终在不使用任何区域设置的情况下完成了我需要的工作。

答案 1 :(得分:0)

因此,您尝试使用与记录时相同的精度在Crystal中显示数字字段? 1.9,2.3451,23456.650000006等? 假设数字的整数部分和小数之间的分隔符始终是小数点,这应该有效:

Local NumberVar dotPos := InstrRev({ado.ValorCliente}, ".");
If dotPos = 0 Then
    0 //returning 0
Else
    Len({ado.ValorCliente}) - dotPos

答案 2 :(得分:0)

你不能在ToText函数中使用格式字符串参数吗?我现在无法检查,但是像next这样的格式字符串可以工作:

stringvar strUpToSixNonZeroDigitsAfterPoint := ToText(numSomeDecimalNumber, '#.######');

答案 3 :(得分:0)

在自定义样式中,输入以下公式,将数字转换为具有设定小数位数的字符串,将其反转,然后计算直到达到非零的数字位数,这是您的数字小数位:

Local NumberVar i := 0;
Local NumberVar p := 10;
Local NumberVar DP := 0;
For i := 1 To p Step 1 Do
If Mid(StrReverse(CStr(Sum({part_dims.weight}),p)),i,1) <> "0" Then (DP := (p+1)-i; Exit For);
DP

您可以将 p 设置为任何内容,它代表最大小数位数。 这可能是一种更简单的方法,但如果您的源值是数字数据类型,则可以使用。