将科学记数法格式的字符串字符转换为标准记数法

Posted

技术标签:

【中文标题】将科学记数法格式的字符串字符转换为标准记数法【英文标题】:Convert String characters in Scientific Notation format into Standard Notation 【发布时间】:2021-01-17 18:22:27 【问题描述】:

我有一个由一些计算生成的用户字符串。用户字符串是“3.2E7” 它是用科学记数法写的。我需要将其转换为标准符号,因为 如果读取的是科学记数法编号,则 App 上的绘图说明会重叠。

我确实知道如何使用 Number 类将其转换为标准表示法,如下所示:

String generated = "3.2E7"
try
  NumberFormat format = NumberFormat.getInstance();
  Number my_number = format.parse(generated);
  System.out.println("see my number: " + my_number); //this prints correctly: 32000000


 catch(Exception exception)
   Log.d("see009",""+exception);
  

现在,我遇到的问题是,如果变量“生成”

String generated = "3.2E-7";
//inside the try catch block from above:
System.out.println("see my number: " + my_number); //this prints 3.2E-7  NOT: 0.00000032

Number 类不接受非整数如何使 NumberFormat 对象格式化科学计数法数字小于 1?

【问题讨论】:

【参考方案1】:

使用 BigDecimal 类我已经能够克服这个问题:

只需这样做:

String generated = "3.2E7";
BigDecimal big_decimal = new BigDecimal(generated);
System.out.println("look at this: " + big_decimal.toPlainString()); //will print: 32000000

generated = "3.2E-7";
big_decimal = new BigDecimal(generated);
System.out.println("look at this: " + big_decimal.toPlainString()); //will print: 0.00000032

BigDecimal 甚至可以使用 20 的幂。这是一个非常有效的解决方案,非常适合我的需求。

【讨论】:

既然您找到了正确的解决方案,请注意:如果我运行您的第一次尝试,由于舍入错误,我会打印“查看我的号码:3.2E-6”。这可能比不正确的格式更糟糕,因为它更容易出错。 所以你是说 BigDecimal 不能把 3.2E-6 变成标准形式? @juwil 不,您的解决方案绝对正确。我用你在问题中使用的方式得到了错误的结果 3.2E-6,仅此一项就足以让我更喜欢你在答案中发布的解决方案。 @juwil 是的,我知道。我从来不知道 BigDecimal 是这么容易解决的。我想我会开始使用它来进行计算,而不是使用 Double 或 Float。但是,我认为 BigDecimal 不如 Double 或 Float 精确! BigDecimal 与您想要的一样精确,前提是您设置了精度(请参阅***.com/questions/9482889/…)。 Float 和 double 并不精确,但操作更快更高效。所以使用哪个取决于您的要求。

以上是关于将科学记数法格式的字符串字符转换为标准记数法的主要内容,如果未能解决你的问题,请参考以下文章

Pandas / 如何将存储为字符串的科学记数法转换为浮点数?

将混合类型 DF 列中的浮点数转换为字符串使用科学记数法

SSIS CSV 导入:字符串转换为科学计数法

go语言基础之格式化输出

pandas.read_csv 将字符串转换为科学记数法中的“数字”(我不想要)

Lua - gmatch科学记数法字符串到数字