我在自定义样式 - >小数
中放入以下公式Local stringVar strCadena:= ToText(cdbl({ado.ValorCliente}) - Truncate({ado.ValorCliente},0)); 长度(strCadena) - 2
但该报告为此操作设置了2位小数(2等于我计算机的“区域设置”中配置的设置) cdbl({ado.ValorCliente}) - 截断({ado.ValorCliente},0)
有没有办法避免区域设置?
提前致谢。 TALO
答案 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 设置为任何内容,它代表最大小数位数。 这可能是一种更简单的方法,但如果您的源值是数字数据类型,则可以使用。