我有一系列数据如下: 100 Mbps, 200 Mbps, 512 Kbps, 256 Kbps, 100 Mbps,
我需要标准化所有必须在' Mbps'单元。我正在使用Jaspersoft的ETL软件,它允许输入表达式来转换数据。每个数据将被分成2个变量,一个用于存储单元(speedunit),另一个用于存储值(speedvalue),类型为Double。现在我使用以下表达式:
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)))
答案 0 :(得分:0)
你可以在这里使用类型转换加倍。所以你的表达可以像这样
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
答案 1 :(得分:0)
以下是demo:
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 类型的变量就足够了。 然后,您只需要将结果格式化为所需的十进制格式。