【问题标题】:Convert String with Time Value "0:00" into decimal/double value?将时间值“0:00”的字符串转换为十进制/双精度值?
【发布时间】:2017-04-29 06:34:51
【问题描述】:

我正在尝试从表中检索数据并将它们转换为双精度值以便绘制它们。第 0 列用“00:00”格式的时间值填充,第 1 列用十进制值填充。

使用此代码,我似乎已正确检索数据并将第 1 列的内容转换为双精度值,但不知道如何将具有时间值的字符串转换为双精度值以表示小时数:

int row = tableRadio.getRowCount();
    for (int r = 0; r  < row; r++) {
        double r2 = Double.parseDouble( tableModel.getValueAt(r, 0).toString() );
        double r3 = Double.parseDouble( tableModel.getValueAt(r, 1).toString() );
        series.add(r2, r3);
    }

在尝试绘制此数据时,我不断收到 java.lang.NumberFormatException: For input string: "0:00",据我了解,这是因为冒号不能等同于数值。但是我怎么能说“00:21”而不是显示为“0.21”或者我可以用来绘制我的数据的东西?欢迎任何建议和示例。

【问题讨论】:

  • 所以,我猜您可能需要 (1) 将 String 分成两个数字部分 - 可能使用 String 类的 split 方法; (2) 将两个部分都转换为数字——可能使用Integer 类的parseInt 方法; (3) 做一些算术 - 将分钟数除以 60(注意整数除法问题)并加上小时数。这些看起来像是您可以自己完成的三个步骤吗?
  • @DawoodibnKareem 第 2 步和第 3 步似乎都是我自己能弄清楚的。然而,第 1 步对我来说有点令人困惑,因为我只使用过一次 split 方法并且不知道在这种情况下如何做。以前我拆分了扫描仪中包含的数据。您介意告诉我这一步是如何完成的吗?
  • 好的,您为什么不查找 String 类的 Javadoc 以了解split 方法的工作原理?
  • @DawoodibnKareem 我阅读了拆分方法,回顾了我曾经使用过的一种拆分方法,并按照您的步骤进行操作。现在一切正常,并且正在绘制我的所有数据!非常感谢您向我解释事情并在您的回复中非常耐心!你非常乐于助人。如果您愿意,请随时将这些步骤放入实际答案中,以便我接受它并且您可以获得一些积分。
  • 您应该将您的答案作为答案发布,以便对其进行投票 - 而不是作为对问题的编辑。

标签: java string time double jfreechart


【解决方案1】:

使用SimpleDateFormatparse()的时间列,创建时间序列图,如图here。在生成的DateAxis 上使用setDateFormatOverride() 来格式化时间,如here 所示。如有需要,可以更改DateFormatSymbols,如图here

【讨论】:

    【解决方案2】:

    所以我使用@Dawood ibn Kareem 的方法让它工作。这是对我有用的最终代码:

        //get number of rows
        int row = tableRadio.getRowCount();
        for (int r = 0; r  < row; r++) {
    
            //get column0's values and convert to String
            String time = ( tableModel.getValueAt(r, 0).toString() );
    
            //split time into two arrays
            String[] timeSplit = time.split(":");
    
            //convert arrays to doubles 
            double hours = Double.parseDouble(timeSplit[0]);
            double min = Double.parseDouble(timeSplit[1]);
    
            //represent column0 values by number of hours
            double col0 = (min / 60) + hours;
    
            //get column1's values and convert to double
            double col1 = Double.parseDouble( tableModel.getValueAt(r, 1).toString() );
    
            //add values to series
            series.add(col0, col1);
        }//end of for loop`
    

    现在所有表格值都转换为双精度值,我已成功将它们绘制成图表。

    【讨论】:

      猜你喜欢
      • 2015-06-14
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 2019-08-31
      相关资源
      最近更新 更多