格式编号,以便在没有点的情况下它太大而采用科学记数法

时间:2016-09-08 17:08:30

标签: java android formatting

我有以下问题: 我在String中存储了大值,我只能显示7位长的数字。以下是从字符串转换为float后的示例 - 我有String 300应该是300,但它是300.0 大于7位的所有内容都应以科学记数法书写(700000000应为7E + 8) 它也可能是7.0E8,但我更喜欢7E + 8。

我已经尝试过格式化字符串,但是当我无法摆脱.0而没有摆脱科学记数法时。这甚至可能吗?

2 个答案:

答案 0 :(得分:0)

java.text包中的类DecimalFormat几乎毫不费力地处理它。针对您的具体案例,一点点业务逻辑就可以解决这个问题。

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class NumberFormatter
{
  public static void main(String args[])
  {
    String stringInput = "1234.5678";
    String outputString = null;
    if (stringInput.length() < 8)
    {
      outputString = stringInput;
    }
    else
    {
      outputString = scientificOutput(stringInput);
    }
    System.out.println(outputString);
  }

  private String scientificOutput(String input)
  {
    NumberFormat formatter = new DecimalFormat("0.###E0");
    Double d = Double.parseDouble(input);
    if (d % 1 == 0)
    {
      // is int
      return formatter.format(d.intValue());
    }
    else
    {
      // is a double
      return formatter.format(d); 
    }
  }
}

答案 1 :(得分:0)

试试这个:

String inputValue = "700000000";
String result;

DecimalFormat df1 = new DecimalFormat("@######");
df1.setMinimumFractionDigits(0);
DecimalFormat df2 = new DecimalFormat("@#####E0");
df2.setMinimumFractionDigits(1);

if (inputValue.length() <= 7) {
    result = df1.format(Double.parseDouble(inputValue));
} else {
    result = df2.format(Double.parseDouble(inputValue));
}