Java double 避免科学记数法但保留数据类型

Posted

技术标签:

【中文标题】Java double 避免科学记数法但保留数据类型【英文标题】:Java double avoid scientific notation but keep the data type 【发布时间】:2020-08-20 16:50:13 【问题描述】:

如何在 Java 中更改 double 的科学记数法但保留数据类型?我知道DecimalFormat,我不想打印要输出的值。我想将它作为双重而不是科学记数法沿管道传递。例如,我希望 2000000000000 作为双精度而不是 2.0E12 的形式。到目前为止,我发现的每个解决方案都将其转换为长小数或大小数或字符串。是否可以将其保留为双精度?

【问题讨论】:

沿着管道传递”是什么意思?只要 Java 中的值“保持”不变,位模式仍然是相同的(1000.010e2 相同,1e31000e0 相同)。科学记数法只是一种(反)序列化格式。 @Turing85 在管道的最后,它被发送到一个 html 页面并显示为科学计数法。我无权访问管道的那部分,所以我不能在那里更改它。我想在它生成时更改它。 那你就不能保留为double。反序列化值的一方决定了格式。 没有。 double 的位模式保持不变。反序列化double(即将double 转换为String)的过程会改变它。 所以你试图解决一个问题,你不负责。将double 转换为HTML 字符串的人负责输出格式。 【参考方案1】:

double 不编码任何格式信息,只编码值。默认情况下,格式化由 Double.toString 控制,或者将值插入 HTML 页面的代码可能正在使用格式化程序。

一种选择是将您的double 替换为带有double 字段但具有执行所需操作的toString 方法的包装类的实例。要进行算术运算,请访问double 字段。 HTML 页面管道,找到不是标准类之一的引用变量,可能会调用其 toString 来格式化值。

【讨论】:

如果您可以将任意对象传递给 HMTL 管道,就像建议的包装器一样,您也可以将格式化的字符串传递给它。

以上是关于Java double 避免科学记数法但保留数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使java中double类型不以科学计数法表示

如何使java中double类型不以科学计数法表示

Java中double类型如何避免显示为科学计数法

java中数值类型转换的问题,double类型显示科学计数法了。

java中如何让double类型不用科学计数法。

java BigDecimal用法详解(保留小数,四舍五入,数字格式化,科学计数法转数字等)