Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何忽略字段的某些值来获取平均值_Java_Jasper Reports - Fatal编程技术网

Java 如何忽略字段的某些值来获取平均值

Java 如何忽略字段的某些值来获取平均值,java,jasper-reports,Java,Jasper Reports,我知道如何获得数字之间的平均值,但当我尝试使用相同的方法(通过设置变量的属性)从数字和字符串的混合值中获得平均值时,它总是返回一个异常(我知道原因) 如何获得包含数字和字符串混合值的列_1的平均值 column_1 3 4 N/A 3 N/A 也就是说,在第1列中,平均值必须为3.33。应采用(3+4+3)/3公式,两个N/A值必须忽略/排除在计算之外。如何做到这一点?此任务可以分解为几个简单的子任务: 从混合类型获取数值。我们应该检查字段中的数值 计算所有数值的平均值(跳

我知道如何获得数字之间的平均值,但当我尝试使用相同的方法(通过设置变量的属性)从数字和字符串的混合值中获得平均值时,它总是返回一个异常(我知道原因)

如何获得包含数字和字符串混合值的列_1的平均值

column_1
  3
  4
  N/A
  3
  N/A

也就是说,在第1列中,平均值必须为
3.33。
应采用
(3+4+3)/3
公式,两个
N/A
值必须忽略/排除在计算之外。如何做到这一点?

此任务可以分解为几个简单的子任务:

  • 从混合类型获取数值。我们应该检查字段中的数值
  • 计算所有数值的平均值(跳过非数值)
  • 为了解决第一个子任务,我们可以使用ApacheCommonsLang库。该方法帮助我们检查值是否为数字

    为了解决第二个子任务,我们可以使用两个变量——第一个用于存储数值,第二个用于计算平均值

    工作示例 数据来源 我在本示例中使用了csv数据源:

    numValue
    3
    4
    N/A
    3
    N/A
    
    下面示例中此数据源的数据适配器名称为str_num.csv。跳过文件的第一行-它包含列的名称

    报告的模板 我使用Jaspersoft Studio(JSS)设计了一个报告模板。详细标注栏用于显示数据,摘要标注栏用于显示平均值

    带有值(数字和非数字)的字段将为java.lang.String类型

    第一个变量仅用于存储数值。如果值

    表达方式为:

    StringUtils.isNumeric($F{numValue})?Integer.valueOf($F{numValue}):null
    
    Java库在这个表达式中使用,这就是为什么我们需要将报表的语言设置为Java,并为StringUtils类添加导入

    第二个变量将为平均计算类型:

    
    
    完整模板:

    
    
    输出结果 JSS中生成的resut如下所示:

    如果我们将第一个变量(用于存储数值)的表达式更改为:

    StringUtils.isNumeric($F{numValue})?整型.valueOf($F{numValue}):0
    
    结果将是:


    -它是5条记录的平均值,而不是上面第一种情况下的3条记录的平均值。

    此任务可以分解为几个简单的子任务:

  • 从混合类型获取数值。我们应该检查字段中的数值
  • 计算所有数值的平均值(跳过非数值)
  • 为了解决第一个子任务,我们可以使用ApacheCommonsLang库。该方法帮助我们检查值是否为数字

    为了解决第二个子任务,我们可以使用两个变量——第一个用于存储数值,第二个用于计算平均值

    工作示例 数据来源 我在本示例中使用了csv数据源:

    numValue
    3
    4
    N/A
    3
    N/A
    
    下面示例中此数据源的数据适配器名称为str_num.csv。跳过文件的第一行-它包含列的名称

    报告的模板 我使用Jaspersoft Studio(JSS)设计了一个报告模板。详细标注栏用于显示数据,摘要标注栏用于显示平均值

    带有值(数字和非数字)的字段将为java.lang.String类型

    第一个变量仅用于存储数值。如果值

    表达方式为:

    StringUtils.isNumeric($F{numValue})?Integer.valueOf($F{numValue}):null
    
    Java库在这个表达式中使用,这就是为什么我们需要将报表的语言设置为Java,并为StringUtils类添加导入

    第二个变量将为平均计算类型:

    
    
    完整模板:

    
    
    输出结果 JSS中生成的resut如下所示:

    如果我们将第一个变量(用于存储数值)的表达式更改为:

    StringUtils.isNumeric($F{numValue})?整型.valueOf($F{numValue}):0
    
    结果将是:


    -它是5条记录的平均值,而不是上面第一种情况下的3条记录的平均值。

    显示jrxml代码;显示异常。jrxml中这两列的数据类型是什么?@DaveJarvis这是我变量的表达式:Double.valueOf($F{column_1})。。显然,它将返回一个异常,因为N/A不能转换为double。。它出现在我的java应用程序上。报告调用的位置。(java.lang.NumberFormatException)@FahadAnjum在字符串中。第1列来自一个数据库,显示jrxml代码;显示异常。jrxml中这两列的数据类型是什么?@DaveJarvis这是我变量的表达式:Double.valueOf($F{column_1})。。显然,它将返回一个异常,因为N/A不能转换为double。。它出现在我的java应用程序上。回购协议在哪里