java中的表达式,将Double值格式化为特定的小数点



我有一系列这样的数据:100Mbps,200Mbps,512Kbps,256Kbps,100Mbps,

我需要将所有数据标准化,这些数据必须以"Mbps"为单位。我使用的是Jaspersoft的ETL软件,它允许输入表达式来转换数据。每个数据将被拆分为两个变量,一个用于存储单位(speedunit),另一个用于保存Double类型的值(speedvalue)。现在我使用以下表达式:

speedunit.equalsIgnoreCase("Kbps") ? (speedvalue / 1000) : speedunit.equalsIgnoreCase("Gbps") ? (speedvalue * 1000) : Var.speedvalue 

问题是,它将值四舍五入为整数。例如512假定为0.512,但是取而代之地显示1。Math.round也无济于事。我不能放入任何用户定义的函数。只允许使用表达式。因此,它必须是一个单行表达式,就像中的例子一样

格式化后的值将保存到列中的MSSQL表中,列中的类型为"十进制(28,2)"

更新:尝试过这个,但也不起作用

speedunit.equalsIgnoreCase("kbps") ? Mathematical.REAL(String.valueOf(speedvalue/1000))

这会产生错误"DecimalFormat无法解析为类型"

speedunit.equalsIgnoreCase("kbps") ? new DecimalFormat("0.00").format(String.valueOf(speedvalue / 1000)))

这里有一个演示:

import java.text.DecimalFormat;

public class DecimalFormatDemo {
    public static void main(String[] args) {
        String speedunit = "Kbps";
        double speedvalue = 512;
        double result = 
                speedunit.equalsIgnoreCase("Kbps") ? (speedvalue / 1000) : speedunit.equalsIgnoreCase("Gbps") ? (speedvalue * 1000) : speedvalue;
        DecimalFormat df = new DecimalFormat("0.000");
        System.out.println(df.format(result));
    }
}

注意:

由于speedvalue的类型为"double",将结果分配给double类型的变量就足够了。然后,您只需要将结果格式化为所需的十进制格式。

您可以使用类型转换在此处加倍。所以你的表情可以像这个

speedunit.equalsIgnoreCase("Kbps") ? 
    (double)(speedvalue / 1000) 
    : speedunit.equalsIgnoreCase("Gbps") ? (double)(speedvalue * 1000) 
    : speedvalue

10/100的评估将给你0,其中(double)10/100的评估将为你0.1

如果你想将小数限制在特定的位数,你可以使用下面的表达式(限制为两个小数)

speedunit.equalsIgnoreCase("Kbps") ? 
    (double)Math.round(100*((double)(speedvalue / 1000))/100 
    : speedunit.equalsIgnoreCase("Gbps") ? 
    (double)Math.round(100*((double)(speedvalue * 1000))/100 
    : speedvalue

如果要限制为三位小数,请将100更改为1000。使用java.text.DecimalFormat是格式化数字的更好方法。在Math.round()中使用乘法和除法是这样一种库不可用的解决方案。

如果你可以使用DecimalFormat,那么你的最佳解决方案将是

speedunit.equalsIgnoreCase("Kbps") ? 
    new DecimalFormat("0.00").format(String.valueOf((double)(speedvalue / 1000))/100 
    : speedunit.equalsIgnoreCase("Gbps") ? 
    new DecimalFormat("0.00").format(String.valueOf((double)(speedvalue * 1000))/100 
    : speedvalue

相关内容

  • 没有找到相关文章

最新更新