【问题标题】: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?

【问题讨论】:

    标签: java android double number-formatting


    【解决方案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 与您想要的一样精确,前提是您设置了精度(请参阅stackoverflow.com/questions/9482889/…)。 Float 和 double 并不精确,但操作更快更高效。所以使用哪个取决于您的要求。
    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2021-12-05
    相关资源
    最近更新 更多