如何在Crystal Reports中忽略小数点后的零值

8

我正在制作一份报告,需要精确的小数值。一个数字可能有2个小数位,另一个数字可能有10个小数位。如果我将小数范围设置为10位,那么该列将始终显示大多数为0的10个小数位。如果存在0,请问如何忽略值中的0?例如,我希望数据显示如下:

123.24
98.234
1212.678432

改为:

123.2400000000
98.2340000000
1212.6784320000

请查看我对在公式CR中舍入小数的回答。 - craig
1
我不想进行任何四舍五入。我只想显示精确数字并省略任何多余的0。 - Icebreaker
4个回答

12

请执行以下步骤:

  • 右键单击您想要应用此格式的“详细信息”文本框
  • 点击“格式化字段”
  • 点击“数字”选项卡
  • 点击“自定义...”
  • 设置适当的“小数”和“四舍五入”值,以反映输入到此报告的表格的小数位数
  • 点击“小数”公式按钮
  • 粘贴以下代码,并确保更改{myproc;1.col1}以反映您的过程/列:

    stringVar number := ToText({myproc;1.col1}, 8); 
    while (right(number, 1) = "0") do 
    number := left(number, len(number) - 1);
    len(number) - InStr(number, ".");
    

重要提示:

  1. 请将"{myproc;1.col1}"替换为您实际使用的变量。
  2. 最后一行是一个公式,它决定显示多少位小数。因此,在去除所有多余的零之后,通过将句点的位置减去修剪后字符串的长度来计算它。

嘿,我尝试了一下,它显示代码中有一个错误。它说“字段名称未知”,并且突出显示了这部分内容:{myproc;1.col1} 有什么想法吗? - Icebreaker
1
在公式编辑器中,您应该能够展开报表字段树并将字段直接拖入公式中。 - sion_corn
最终有一种可靠的方法来显示确切的数字。不过,出于我的目的,我将8改为了10,因为那似乎是最大值。我曾尝试各种小数和舍入公式。 - MC10
2
是的,我记得以前在弄清楚这个问题时有多么令人沮丧...最好的解决方案是不要使用Crystal :) - sion_corn
1
嗨,我对Crystal Report还很陌生。但是这里的“len(number)-InStr(number,“。”);”这一行是什么意思?我可以理解“Len”函数将返回“number”变量的长度,“InStr”函数将返回“.”的位置,但您在哪里分配了它的值。你能解释一下吗? - Neo
显示剩余4条评论

7
在“格式”字段中尝试以下代码,方法如下:数字→自定义→小数位 代码部分:
if CurrentFieldValue=Int(CurrentFieldValue)  then
    0
else
    2

您的小数位为“2”,您可以将其替换为自己所需的数字。

谢谢。这解决了我的两个问题。第一,这就是我需要的。第二,我一直在寻找“CurrentFieldValue”。 - Himanshu

1
这将使你保持字段为数字,而无需转换为文本。这个解决方案是在小数点处进行格式化更改。
•右键单击要应用此格式化的“详细信息”字段
•点击“格式化字段”
•点击“数字”选项卡
•点击“自定义...”
从您想要保留的最大小数位开始,然后向后复制该行。例如,如果您知道具有值的最大小数位置,则可以从该数字开始,即1.2345600您将从5开始。如果数字为0,则必须首先考虑此问题,否则您将收到错误消息。
“字段名称”是您想要更改格式的数据库字段名称。
If {"Field Name"} = 0 then 2 else 
if((({"Field Name"})/(truncate({"Field Name},4)))>1) then 5 else
if((({"Field Name"})/(truncate({"Field Name},3)))>1) then 4 else
if((({"Field Name"})/(truncate({"Field Name},2)))>1) then 3 else
2

1
请您能否详细阐述一下您的答案,并在提供解决方案时添加更多的描述? - abarisone

0

如果您在此字段上没有进行任何计算,只是报告它,那么您可以将其作为字符串而不是数字输入到您的报告中吗?


没有计算。它直接从我的Oracle数据库中提取。我没有创建提取数据的过程,但我知道它不会对数字进行任何操作。在CR级别也没有进行任何计算。 - Icebreaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接