Example usage for org.apache.commons.math3.fraction BigFraction subtract

List of usage examples for org.apache.commons.math3.fraction BigFraction subtract

Introduction

In this page you can find the example usage for org.apache.commons.math3.fraction BigFraction subtract.

Prototype

public BigFraction subtract(final BigFraction fraction) 

Source Link

Document

Subtracts the value of another fraction from the value of this one, returning the result in reduced form.

Usage

From source file:com.netflix.imfutility.util.ConversionHelper.java

/**
 * Transforms edit units to a timecode according to the given edit unit rate.
 * <ul>//from ww  w  .  j  ava2  s  .  c  om
 * <li>An example of edit units is a frame.</li>
 * <li>The output timecode has the following format 'hh:mm:ss.xxx', where xxx is milliseconds.</li>
 * </ul>
 *
 * @param eu         edit units to be transformed
 * @param unitsInSec edit unit rate
 * @return timecode as a string in "hh:mm:ss.mss" format.
 */
public static String editUnitToTimecode(BigInteger eu, BigFraction unitsInSec) {
    BigFraction editUnits = new BigFraction(eu);
    BigFraction unitsInMin = unitsInSec.multiply(new BigFraction(60));
    BigFraction unitsInHour = unitsInSec.multiply(new BigFraction(60 * 60));

    int hours = editUnits.divide(unitsInHour).intValue();
    int minutes = editUnits.subtract(unitsInHour.multiply(hours)).divide(unitsInMin).intValue();
    int seconds = editUnits.subtract(unitsInHour.multiply(hours)).subtract(unitsInMin.multiply(minutes))
            .divide(unitsInSec).intValue();
    BigFraction units = editUnits.subtract(unitsInHour.multiply(hours)).subtract(unitsInMin.multiply(minutes))
            .subtract(unitsInSec.multiply(seconds));
    int milliseconds = new BigFraction(1000).divide(unitsInSec).multiply(units).intValue();

    return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds);
}

From source file:com.netflix.imfutility.util.ConversionHelper.java

/**
 * Transforms milliseconds to an SMPTE timecode according to the given edit unit rate.
 * <ul>//  www  .j av  a 2s  .  c om
 * <li>An example of edit units is a frame.</li>
 * <li>The output timecode has the following format 'hh:mm:ss:ff'.</li>
 * </ul>
 *
 * @param milliseconds milliseconds to be transformed
 * @param unitsInSec   edit unit rate
 * @return timecode as a string in "hh:mm:ss:ff" format.
 */
public static String msToSmpteTimecode(long milliseconds, BigFraction unitsInSec) {
    BigFraction ms = new BigFraction(milliseconds);
    BigFraction msInMin = new BigFraction(60 * 1000);
    BigFraction msInHour = new BigFraction(60 * 60 * 1000);
    BigFraction msInSec = new BigFraction(1000);
    BigFraction unitsInMs = unitsInSec.divide(msInSec);

    int hours = ms.divide(msInHour).intValue();
    int minutes = ms.subtract(msInHour.multiply(hours)).divide(msInMin).intValue();
    int seconds = ms.subtract(msInHour.multiply(hours)).subtract(msInMin.multiply(minutes)).divide(msInSec)
            .intValue();
    int units = ms.subtract(msInHour.multiply(hours)).subtract(msInMin.multiply(minutes))
            .subtract(msInSec.multiply(seconds)).multiply(unitsInMs).intValue();

    return String.format("%02d:%02d:%02d:%02d", hours, minutes, seconds, units);
}