禁用/转换 Java 使大数字变小? (1000,000,0000 到 1E10) 使用 SPEL 表达式
Posted
技术标签:
【中文标题】禁用/转换 Java 使大数字变小? (1000,000,0000 到 1E10) 使用 SPEL 表达式【英文标题】:Disable/Convert Java making big number smaller? (1000,000,0000 to 1E10) using SPEL Expression 【发布时间】:2021-01-04 18:55:17 【问题描述】:我正在使用 Spring SPEL 从 xml 消息中使用 XPath 提取值 10000000000。但是,它以科学计数法显示为 1E10,但我想保持相同的格式(10000000000)。
如何使用 SPEL 语言表达来实现这一点?
#derivedValue = 从 XPath 中提取的值 10000000000
我尝试在下面的转换规则中使用 java DecimalFormat 但没有奏效并引发拼写异常:
新的 java.text.DecimalFormat.getIntegerInstance().format((T(java.lang.Double)).parseDouble(#derivedValue)
【问题讨论】:
@iota No. value is 10000000000 in xml.. @GaryRussell 所以 Xpath 就像“//foo/fooStream/fooPeriodAmount/fooCalc/Schedule/initialValue”,其中值为 10000000000。 @GaryRussell 这是示例 SPEL:new java.text.DecimalFormat("#0.0000").format((T(java.lang.Double).parseDouble(#derivedValue))).. 那么你得到的就是double
。
看我的回答; NUMBER_RESULT 评估类型返回一个双精度值;你没有显示#derivedValue
的评估位置,但如果是结果,它就是一个双精度数,所以#derivedValue.longValue()
会将它转换为一个长整数。
【参考方案1】:
在Double
上使用longValue()
。
像这样使用 Spring Integration 的 #xpath
函数...
@Bean
public ApplicationRunner runner(BeanFactory bf)
return args ->
Object value =
new SpelExpressionParser()
.parseExpression("#xpath(#root, '/foo', 'number').longValue()")
.getValue(IntegrationContextUtils.getEvaluationContext(bf), "<foo>10000000000</foo>");
System.out.println(value);
;
【讨论】:
基本上我的目标不是在这里使用任何花哨的spring bean代码,而是在发布xml消息时实现转换/标记值为10000000000而不是科学计数法。 您说您使用的是 XPath;我只是碰巧使用了我熟悉的实现。如果您使用NUMBER_RESULT
评估类型评估Xpath,您将获得Double
;只需拨打longValue()
就可以了。以上是关于禁用/转换 Java 使大数字变小? (1000,000,0000 到 1E10) 使用 SPEL 表达式的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用:[js] 文件是 CommonJS 模块;它可以转换为 ES6 模块