禁用/转换 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 表达式的主要内容,如果未能解决你的问题,请参考以下文章

026.阿拉伯数字转换为罗马数字

将录制的音频转换为数字数据

如何禁用:[js] 文件是 CommonJS 模块;它可以转换为 ES6 模块

用视频转换器转换格式,怎么把内存变小?

像这样的数字在 Java 中是啥意思:0b1000_1100_1010? (数字之间的“b”)[重复]

pdf文件太大怎么变小如何调整