Search code examples
javaeclipsefloating-pointconvertersbigdecimal

Convert time to float and viceversa in Java


I need to show some times value on a linear chart and I built a snippet code to convert the values from time to float in Java. My code doesn't works very well because I can't convert from float to time...

This is my result:

From time to float:
7:43 --> 7.7166667

From float to time:
7.7166667 --> 7:60 (this is wrong...I would to see 7:43)

This is my snippet code:

public class Test {

    public static void main(String[] args) 
    {
        String time = "7:43";
        float timeFloat = Float.parseFloat(time.replace(":","."));
        float resultTo100 = convertTo100(timeFloat);
        System.out.println(resultTo100);
        String resultTo60 = convertTo60(resultTo100);
        System.out.println(resultTo60);
    }

    public static float convertTo100(float input)
    {
        String input_string = Float.toString(input);
        BigDecimal inputBD = new BigDecimal(input_string);
        String hhStr = input_string.split("\\.")[0];
        BigDecimal output = new BigDecimal(Float.toString(Integer.parseInt(hhStr)));
        output = output.add((inputBD.subtract(output).divide(BigDecimal.valueOf(60), 10, BigDecimal.ROUND_HALF_EVEN)).multiply(BigDecimal.valueOf(100)));

        return Float.parseFloat(output.toString());
    }

    public static String convertTo60(float input)
    {
        String input_string = Float.toString(input);
        BigDecimal inputBD = new BigDecimal(input_string);
        String hhStr = input_string.split("\\.")[0];
        BigDecimal output = new BigDecimal(Float.toString(Integer.parseInt(hhStr)));
        output = output.add((inputBD.subtract(output).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_EVEN)).multiply(BigDecimal.valueOf(60)));

        return output.toString().replace(".",":");
    }
}

What am I doing wrong?

Thanks!


Solution

  • in your convertTo60 switch the order of divide and multiply operations.