Java:如何格式化具有第十个指数的字符串数字

标签 java string number-formatting

我有一个数字作为字符串,如下所示:“9.756088256835938E-4”,但我只能使用指定数量的字符(在这种特殊情况下为 9 个字符)。所以我想要这样的东西:“9.7561E-4”。我已经尝试将字符串转换为 double ,然后使用格式方法来获得更少的字符,但我没有得到正确的解决方案。

问题是我需要十个指数输出,因为有些数字比我拥有的字符数长。如果可能的话,数字应该不显示十指数,如果不能就使用十指数。

正确的舍入也很好。

它应该适用于负数。 (减去需要一个字符!!!)

是否有一个格式函数可以定义输出字符串的最大长度?有什么想法吗?

最佳答案

我无法找到一个可以涵盖您描述的所有情况的单一格式模式。但我认为以下是有效的逻辑组合:

   public static void main(String[] args) throws Exception {
      // 97.560883
      System.out.println(formatNum(Double.parseDouble("9.756088256835938E+1")));
      // 9.756E+11
      System.out.println(formatNum(Double.parseDouble("9.756088256835938E+11"))); 
      // 0.0009756
      System.out.println(formatNum(Double.parseDouble("9.756088256835938E-4")));  
      // -9.8E+111
      System.out.println(formatNum(Double.parseDouble("-9.756088256835938E+111")));
   }

   private static final int MAX_LENGTH = 9;

   private static String formatNum(double number) {
      String out = null;
      for ( int i = 0; i < MAX_LENGTH; i++ ) {
         String format = "%." + i + "G";
         out = String.format(format, number);
         if ( out.length() == MAX_LENGTH ) {
            return out;
         }
      }
      return out; //the best we can do
   }

模式中的“G”指示格式化程序在允许相同或更好的精度时放弃使用指数。我们增长到最大长度,并在输出字符串达到 10 个字符时停止。我认为您可以对 DecimalFormat 采取相同的方法,但我更熟悉 Formatter

关于Java:如何格式化具有第十个指数的字符串数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5339963/

相关文章:

java - 将 XWPFRun 拆分为多个运行

java - 如何验证自定义注释属性?

java - 如何使用加密密码连接到 PostgreSQL 服务器

java - 在 Java 7 中格式化 ISO 8601

java - NumberFormat Java 的奇怪行为

c++ - 使用 C++ 从文件中解析坐标

r - 在 R 中将复制的文本转换为字符串的快速方法?

c++ - 循环和 strcpy

php - 转换数字 |整数到单词

qt - 如何在 Qt 的模型/ View 框架中添加数字格式?