Unit rounding fine-tuning
This commit is contained in:
		
							parent
							
								
									2c6c5aa4c3
								
							
						
					
					
						commit
						506dc0c9b7
					
				@ -1,6 +1,6 @@
 | 
			
		||||
package net.sf.openrocket.gui.dialogs;
 | 
			
		||||
 | 
			
		||||
import static net.sf.openrocket.unit.Unit.NOUNIT2;
 | 
			
		||||
import static net.sf.openrocket.unit.Unit.NOUNIT;
 | 
			
		||||
import static net.sf.openrocket.util.Chars.ALPHA;
 | 
			
		||||
 | 
			
		||||
import java.awt.Color;
 | 
			
		||||
@ -230,7 +230,7 @@ public class ComponentAnalysisDialog extends JDialog implements ChangeListener {
 | 
			
		||||
				new Column("<html>C<sub>N<sub>" + ALPHA + "</sub></sub>") {
 | 
			
		||||
					@Override
 | 
			
		||||
					public Object getValueAt(int row) {
 | 
			
		||||
						return NOUNIT2.toString(cpData.get(row).getCP().weight);
 | 
			
		||||
						return NOUNIT.toString(cpData.get(row).getCP().weight);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -179,7 +179,7 @@ public class GeneralOptimizationDialog extends JDialog {
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	private double bestValue = Double.NaN;
 | 
			
		||||
	private Unit bestValueUnit = Unit.NOUNIT2;
 | 
			
		||||
	private Unit bestValueUnit = Unit.NOUNIT;
 | 
			
		||||
	private int stepCount = 0;
 | 
			
		||||
	private int evaluationCount = 0;
 | 
			
		||||
	private double stepSize = 0;
 | 
			
		||||
 | 
			
		||||
@ -202,7 +202,7 @@ public class GeneralUnit extends Unit {
 | 
			
		||||
	///// TESTING:
 | 
			
		||||
	
 | 
			
		||||
	private static void printTicks(double start, double end, double minor, double major) {
 | 
			
		||||
		Tick[] ticks = Unit.NOUNIT2.getTicks(start, end, minor, major);
 | 
			
		||||
		Tick[] ticks = Unit.NOUNIT.getTicks(start, end, minor, major);
 | 
			
		||||
		String str = "Ticks for ("+start+","+end+","+minor+","+major+"):";
 | 
			
		||||
		for (int i=0; i<ticks.length; i++) {
 | 
			
		||||
			str += " "+ticks[i].value;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								core/src/net/sf/openrocket/unit/InchUnit.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								core/src/net/sf/openrocket/unit/InchUnit.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
			
		||||
package net.sf.openrocket.unit;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Special unit for inches, which always provides 3-decimal precision.
 | 
			
		||||
 */
 | 
			
		||||
public class InchUnit extends GeneralUnit {
 | 
			
		||||
	
 | 
			
		||||
	public InchUnit(double multiplier, String unit) {
 | 
			
		||||
		super(multiplier, unit);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	protected double roundForDecimalFormat(double val) {
 | 
			
		||||
		double mul = 1000.0;
 | 
			
		||||
		val = Math.rint(val * mul) / mul;
 | 
			
		||||
		return val;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@ -6,8 +6,8 @@ import net.sf.openrocket.util.Chars;
 | 
			
		||||
 | 
			
		||||
public abstract class Unit {
 | 
			
		||||
	
 | 
			
		||||
	/** No unit with 2 digit precision */
 | 
			
		||||
	public static final Unit NOUNIT2 = new GeneralUnit(1, "" + Chars.ZWSP, 2);
 | 
			
		||||
	/** No unit */
 | 
			
		||||
	public static final Unit NOUNIT = new GeneralUnit(1, "" + Chars.ZWSP, 2);
 | 
			
		||||
	
 | 
			
		||||
	protected final double multiplier; // meters = units * multiplier
 | 
			
		||||
	protected final String unit;
 | 
			
		||||
@ -101,13 +101,23 @@ public abstract class Unit {
 | 
			
		||||
		if (Math.abs(val) <= 0.0005) {
 | 
			
		||||
			return "0";
 | 
			
		||||
		}
 | 
			
		||||
		double sign = Math.signum(val);
 | 
			
		||||
		double mul = 1000.0;
 | 
			
		||||
		val = Math.abs(val);
 | 
			
		||||
		val = Math.rint(val*mul) / mul * sign;
 | 
			
		||||
		
 | 
			
		||||
		val = roundForDecimalFormat(val);
 | 
			
		||||
		return decFormat.format(val);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	protected double roundForDecimalFormat(double val) {
 | 
			
		||||
		double sign = Math.signum(val);
 | 
			
		||||
		val = Math.abs(val);
 | 
			
		||||
		double mul = 1.0;
 | 
			
		||||
		while (val < 100) {
 | 
			
		||||
			mul *= 10;
 | 
			
		||||
			val *= 10;
 | 
			
		||||
		}
 | 
			
		||||
		val = Math.rint(val) / mul * sign;
 | 
			
		||||
		return val;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Return a string with the specified value and unit.  The value is converted into
 | 
			
		||||
 | 
			
		||||
@ -85,14 +85,14 @@ public class UnitGroup {
 | 
			
		||||
	 */
 | 
			
		||||
	static {
 | 
			
		||||
		UNITS_NONE = new UnitGroup();
 | 
			
		||||
		UNITS_NONE.addUnit(Unit.NOUNIT2);
 | 
			
		||||
		UNITS_NONE.addUnit(Unit.NOUNIT);
 | 
			
		||||
		
 | 
			
		||||
		UNITS_ENERGY = new UnitGroup();
 | 
			
		||||
		UNITS_ENERGY.addUnit(new GeneralUnit(1, "J"));
 | 
			
		||||
		UNITS_ENERGY.addUnit(new GeneralUnit(1e-7, "erg"));
 | 
			
		||||
		UNITS_ENERGY.addUnit(new GeneralUnit(1.055, "BTU"));
 | 
			
		||||
		UNITS_ENERGY.addUnit(new GeneralUnit(4.184, "cal"));
 | 
			
		||||
		UNITS_ENERGY.addUnit(new GeneralUnit(1.3558179483314, "ft"+DOT+"lbf"));
 | 
			
		||||
		UNITS_ENERGY.addUnit(new GeneralUnit(1.3558179483314, "ft" + DOT + "lbf"));
 | 
			
		||||
		UNITS_ENERGY.setDefaultUnit(0);
 | 
			
		||||
		
 | 
			
		||||
		UNITS_POWER = new UnitGroup();
 | 
			
		||||
@ -104,7 +104,7 @@ public class UnitGroup {
 | 
			
		||||
		UNITS_POWER.setDefaultUnit(1);
 | 
			
		||||
		
 | 
			
		||||
		UNITS_MOMENTUM = new UnitGroup();
 | 
			
		||||
		UNITS_MOMENTUM.addUnit(new GeneralUnit(1, "kg"+DOT+"m/s"));
 | 
			
		||||
		UNITS_MOMENTUM.addUnit(new GeneralUnit(1, "kg" + DOT + "m/s"));
 | 
			
		||||
		UNITS_MOMENTUM.setDefaultUnit(0);
 | 
			
		||||
		
 | 
			
		||||
		UNITS_VOLTAGE = new UnitGroup();
 | 
			
		||||
@ -121,7 +121,7 @@ public class UnitGroup {
 | 
			
		||||
		UNITS_LENGTH.addUnit(new GeneralUnit(0.001, "mm"));
 | 
			
		||||
		UNITS_LENGTH.addUnit(new GeneralUnit(0.01, "cm"));
 | 
			
		||||
		UNITS_LENGTH.addUnit(new GeneralUnit(1, "m"));
 | 
			
		||||
		UNITS_LENGTH.addUnit(new GeneralUnit(0.0254, "in"));
 | 
			
		||||
		UNITS_LENGTH.addUnit(new InchUnit(0.0254, "in"));
 | 
			
		||||
		UNITS_LENGTH.addUnit(new FractionalUnit(0.0254, "in/64", "in", 64, 1d / 16d, 0.5d / 64d));
 | 
			
		||||
		UNITS_LENGTH.addUnit(new GeneralUnit(0.3048, "ft"));
 | 
			
		||||
		UNITS_LENGTH.setDefaultUnit(1);
 | 
			
		||||
@ -476,9 +476,9 @@ public class UnitGroup {
 | 
			
		||||
		defaultUnit = n;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public Unit getSIUnit(){
 | 
			
		||||
		for (Unit u : units){
 | 
			
		||||
			if (u.multiplier == 1){
 | 
			
		||||
	public Unit getSIUnit() {
 | 
			
		||||
		for (Unit u : units) {
 | 
			
		||||
			if (u.multiplier == 1) {
 | 
			
		||||
				return u;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@ -557,7 +557,7 @@ public class UnitGroup {
 | 
			
		||||
	 * @return the value in SI units.
 | 
			
		||||
	 * @see Unit#fromUnit(double)
 | 
			
		||||
	 */
 | 
			
		||||
	public double fromUnit( double value ) {
 | 
			
		||||
	public double fromUnit(double value) {
 | 
			
		||||
		return this.getDefaultUnit().fromUnit(value);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@ -601,20 +601,20 @@ public class UnitGroup {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public String toString(){
 | 
			
		||||
		return this.getClass().getSimpleName()+":"+this.getSIUnit().toString();
 | 
			
		||||
	public String toString() {
 | 
			
		||||
		return this.getClass().getSimpleName() + ":" + this.getSIUnit().toString();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean equals(Object o){
 | 
			
		||||
	public boolean equals(Object o) {
 | 
			
		||||
		UnitGroup u = (UnitGroup) o;
 | 
			
		||||
		int size = units.size();
 | 
			
		||||
		if (size != u.units.size()){
 | 
			
		||||
		if (size != u.units.size()) {
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		for (int i=0; i<size; i++){
 | 
			
		||||
			if ( !units.get(i).equals(u.units.get(i)) ){
 | 
			
		||||
		for (int i = 0; i < size; i++) {
 | 
			
		||||
			if (!units.get(i).equals(u.units.get(i))) {
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@ -675,7 +675,7 @@ public class UnitGroup {
 | 
			
		||||
	@Override
 | 
			
		||||
	public int hashCode() {
 | 
			
		||||
		int code = 0;
 | 
			
		||||
		for (Unit u : units){
 | 
			
		||||
		for (Unit u : units) {
 | 
			
		||||
			code = code + u.hashCode();
 | 
			
		||||
		}
 | 
			
		||||
		return code;
 | 
			
		||||
 | 
			
		||||
@ -44,9 +44,9 @@ public class TestRocketOptimizationFunction {
 | 
			
		||||
		final double p1 = 0.4;
 | 
			
		||||
		final double p2 = 0.7;
 | 
			
		||||
		final double ddist = -0.43;
 | 
			
		||||
		final Value dref = new Value(ddist, Unit.NOUNIT2);
 | 
			
		||||
		final Value dref = new Value(ddist, Unit.NOUNIT);
 | 
			
		||||
		final double pvalue = 9.81;
 | 
			
		||||
		final Value pvalueValue = new Value(9.81, Unit.NOUNIT2);
 | 
			
		||||
		final Value pvalueValue = new Value(9.81, Unit.NOUNIT);
 | 
			
		||||
		final double gvalue = 8.81;
 | 
			
		||||
		final Point point = new Point(p1, p2);
 | 
			
		||||
		
 | 
			
		||||
@ -90,7 +90,7 @@ public class TestRocketOptimizationFunction {
 | 
			
		||||
		final double p1 = 0.4;
 | 
			
		||||
		final double p2 = 0.7;
 | 
			
		||||
		final double ddist = -0.43;
 | 
			
		||||
		final Value dref = new Value(0.33, Unit.NOUNIT2);
 | 
			
		||||
		final Value dref = new Value(0.33, Unit.NOUNIT);
 | 
			
		||||
		final double pvalue = 9.81;
 | 
			
		||||
		
 | 
			
		||||
		// @formatter:off
 | 
			
		||||
@ -127,7 +127,7 @@ public class TestRocketOptimizationFunction {
 | 
			
		||||
		final double p1 = 0.4;
 | 
			
		||||
		final double p2 = 0.7;
 | 
			
		||||
		final double ddist = 0.98;
 | 
			
		||||
		final Value dref = new Value(ddist, Unit.NOUNIT2);
 | 
			
		||||
		final Value dref = new Value(ddist, Unit.NOUNIT);
 | 
			
		||||
		final Point point = new Point(p1, p2);
 | 
			
		||||
		
 | 
			
		||||
		// @formatter:off
 | 
			
		||||
@ -168,7 +168,7 @@ public class TestRocketOptimizationFunction {
 | 
			
		||||
		final double p1 = 0.4;
 | 
			
		||||
		final double p2 = 0.7;
 | 
			
		||||
		final double ddist = Double.NaN;
 | 
			
		||||
		final Value dref = new Value(0.33, Unit.NOUNIT2);
 | 
			
		||||
		final Value dref = new Value(0.33, Unit.NOUNIT);
 | 
			
		||||
		
 | 
			
		||||
		// @formatter:off
 | 
			
		||||
		context.checking(new Expectations() {{
 | 
			
		||||
 | 
			
		||||
@ -9,159 +9,162 @@ public class UnitToStringTest {
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testPositiveToString() {
 | 
			
		||||
		// very small positive numbers ( < 0.0005) are returned as "0"
 | 
			
		||||
		assertEquals("0",Unit.NOUNIT2.toString(0.00040));
 | 
			
		||||
		assertEquals("0",Unit.NOUNIT2.toString(0.00050)); // check boundary of change in format
 | 
			
		||||
		assertEquals("0", Unit.NOUNIT.toString(0.00040));
 | 
			
		||||
		assertEquals("0", Unit.NOUNIT.toString(0.00050)); // check boundary of change in format
 | 
			
		||||
		
 | 
			
		||||
		// positive number < 0.095 use 3 digit decimal format
 | 
			
		||||
		assertEquals("0.001",Unit.NOUNIT2.toString(0.00051));  // check boundary of change in format
 | 
			
		||||
		assertEquals("0.001",Unit.NOUNIT2.toString(0.00060));
 | 
			
		||||
		assertEquals("0.001", Unit.NOUNIT.toString(0.00051)); // check boundary of change in format
 | 
			
		||||
		assertEquals("0.001", Unit.NOUNIT.toString(0.00060));
 | 
			
		||||
		
 | 
			
		||||
		// rounding at third digit.
 | 
			
		||||
		assertEquals("0.001",Unit.NOUNIT2.toString(0.0014));
 | 
			
		||||
		assertEquals("0.002",Unit.NOUNIT2.toString(0.0015));  // round to even
 | 
			
		||||
		assertEquals("0.002",Unit.NOUNIT2.toString(0.0016));
 | 
			
		||||
		assertEquals("0.002",Unit.NOUNIT2.toString(0.0024));
 | 
			
		||||
		assertEquals("0.002",Unit.NOUNIT2.toString(0.0025)); // round to even
 | 
			
		||||
		assertEquals("0.003",Unit.NOUNIT2.toString(0.0026));
 | 
			
		||||
		assertEquals("0.009",Unit.NOUNIT2.toString(0.0094));
 | 
			
		||||
		assertEquals("0.001", Unit.NOUNIT.toString(0.0014));
 | 
			
		||||
		assertEquals("0.002", Unit.NOUNIT.toString(0.0015)); // round to even
 | 
			
		||||
		assertEquals("0.002", Unit.NOUNIT.toString(0.0016));
 | 
			
		||||
		assertEquals("0.002", Unit.NOUNIT.toString(0.0024));
 | 
			
		||||
		assertEquals("0.002", Unit.NOUNIT.toString(0.0025)); // round to even
 | 
			
		||||
		assertEquals("0.003", Unit.NOUNIT.toString(0.0026));
 | 
			
		||||
		assertEquals("0.009", Unit.NOUNIT.toString(0.0094));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("0.01",Unit.NOUNIT2.toString(0.0095));  // no trailing zeros after rounding
 | 
			
		||||
		assertEquals("0.01", Unit.NOUNIT.toString(0.0095)); // no trailing zeros after rounding
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("0.011",Unit.NOUNIT2.toString(0.0114));
 | 
			
		||||
		assertEquals("0.012",Unit.NOUNIT2.toString(0.0115)); // round to even
 | 
			
		||||
		assertEquals("0.012",Unit.NOUNIT2.toString(0.0119));
 | 
			
		||||
		assertEquals("0.012",Unit.NOUNIT2.toString(0.0124));
 | 
			
		||||
		assertEquals("0.012",Unit.NOUNIT2.toString(0.0125)); // round to even
 | 
			
		||||
		assertEquals("0.013",Unit.NOUNIT2.toString(0.0129));
 | 
			
		||||
		assertEquals("0.011", Unit.NOUNIT.toString(0.0114));
 | 
			
		||||
		assertEquals("0.012", Unit.NOUNIT.toString(0.0115)); // round to even
 | 
			
		||||
		assertEquals("0.012", Unit.NOUNIT.toString(0.0119));
 | 
			
		||||
		assertEquals("0.012", Unit.NOUNIT.toString(0.0124));
 | 
			
		||||
		assertEquals("0.012", Unit.NOUNIT.toString(0.0125)); // round to even
 | 
			
		||||
		assertEquals("0.013", Unit.NOUNIT.toString(0.0129));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("0.095",Unit.NOUNIT2.toString(0.0949)); // boundary check
 | 
			
		||||
		assertEquals("0.095", Unit.NOUNIT.toString(0.0949)); // boundary check
 | 
			
		||||
		
 | 
			
		||||
		// positive numbers < 100 
 | 
			
		||||
		assertEquals("0.1",Unit.NOUNIT2.toString(0.095)); // boundary check
 | 
			
		||||
		assertEquals("0.01", Unit.NOUNIT.toString(0.0095)); // boundary check
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("0.11",Unit.NOUNIT2.toString(0.111));
 | 
			
		||||
		assertEquals("0.12",Unit.NOUNIT2.toString(0.115)); // round to even
 | 
			
		||||
		assertEquals("0.12",Unit.NOUNIT2.toString(0.117));
 | 
			
		||||
		assertEquals("0.12",Unit.NOUNIT2.toString(0.121));
 | 
			
		||||
		assertEquals("0.12",Unit.NOUNIT2.toString(0.125)); // round to even
 | 
			
		||||
		assertEquals("0.13",Unit.NOUNIT2.toString(0.127));
 | 
			
		||||
		assertEquals("0.111", Unit.NOUNIT.toString(0.1111));
 | 
			
		||||
		assertEquals("0.112", Unit.NOUNIT.toString(0.1115)); // round to even
 | 
			
		||||
		assertEquals("0.112", Unit.NOUNIT.toString(0.1117));
 | 
			
		||||
		assertEquals("0.112", Unit.NOUNIT.toString(0.1121));
 | 
			
		||||
		assertEquals("0.112", Unit.NOUNIT.toString(0.1125)); // round to even
 | 
			
		||||
		assertEquals("0.113", Unit.NOUNIT.toString(0.1127));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("1.11",Unit.NOUNIT2.toString(1.113));
 | 
			
		||||
		assertEquals("1.12",Unit.NOUNIT2.toString(1.115)); // round to even
 | 
			
		||||
		assertEquals("1.12",Unit.NOUNIT2.toString(1.117));
 | 
			
		||||
		assertEquals("1.12",Unit.NOUNIT2.toString(1.123));
 | 
			
		||||
		assertEquals("1.12",Unit.NOUNIT2.toString(1.125)); // round to even
 | 
			
		||||
		assertEquals("1.13",Unit.NOUNIT2.toString(1.127));
 | 
			
		||||
		assertEquals("1.11", Unit.NOUNIT.toString(1.113));
 | 
			
		||||
		assertEquals("1.12", Unit.NOUNIT.toString(1.115)); // round to even
 | 
			
		||||
		assertEquals("1.12", Unit.NOUNIT.toString(1.117));
 | 
			
		||||
		assertEquals("1.12", Unit.NOUNIT.toString(1.123));
 | 
			
		||||
		assertEquals("1.12", Unit.NOUNIT.toString(1.125)); // round to even
 | 
			
		||||
		assertEquals("1.13", Unit.NOUNIT.toString(1.127));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("12.3",Unit.NOUNIT2.toString(12.320));
 | 
			
		||||
		assertEquals("12.4",Unit.NOUNIT2.toString(12.350)); // round to even
 | 
			
		||||
		assertEquals("12.4",Unit.NOUNIT2.toString(12.355));
 | 
			
		||||
		assertEquals("12.4",Unit.NOUNIT2.toString(12.420));
 | 
			
		||||
		assertEquals("12.4",Unit.NOUNIT2.toString(12.450)); // round to even
 | 
			
		||||
		assertEquals("12.5",Unit.NOUNIT2.toString(12.455));
 | 
			
		||||
		assertEquals("12.3", Unit.NOUNIT.toString(12.320));
 | 
			
		||||
		assertEquals("12.4", Unit.NOUNIT.toString(12.350)); // round to even
 | 
			
		||||
		assertEquals("12.4", Unit.NOUNIT.toString(12.355));
 | 
			
		||||
		assertEquals("12.4", Unit.NOUNIT.toString(12.420));
 | 
			
		||||
		assertEquals("12.4", Unit.NOUNIT.toString(12.450)); // round to even
 | 
			
		||||
		assertEquals("12.5", Unit.NOUNIT.toString(12.455));
 | 
			
		||||
		
 | 
			
		||||
		// positive numbers <= 1E6
 | 
			
		||||
		assertEquals("123",Unit.NOUNIT2.toString(123.20));
 | 
			
		||||
		assertEquals("124",Unit.NOUNIT2.toString(123.50)); // round to even
 | 
			
		||||
		assertEquals("124",Unit.NOUNIT2.toString(123.55));
 | 
			
		||||
		assertEquals("124",Unit.NOUNIT2.toString(124.20));
 | 
			
		||||
		assertEquals("124",Unit.NOUNIT2.toString(124.50)); // round to even
 | 
			
		||||
		assertEquals("125",Unit.NOUNIT2.toString(124.55));
 | 
			
		||||
		assertEquals("123", Unit.NOUNIT.toString(123.20));
 | 
			
		||||
		assertEquals("124", Unit.NOUNIT.toString(123.50)); // round to even
 | 
			
		||||
		assertEquals("124", Unit.NOUNIT.toString(123.55));
 | 
			
		||||
		assertEquals("124", Unit.NOUNIT.toString(124.20));
 | 
			
		||||
		assertEquals("124", Unit.NOUNIT.toString(124.50)); // round to even
 | 
			
		||||
		assertEquals("125", Unit.NOUNIT.toString(124.55));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("1234",Unit.NOUNIT2.toString(1234.2));
 | 
			
		||||
		assertEquals("1234",Unit.NOUNIT2.toString(1234.5)); // round to even
 | 
			
		||||
		assertEquals("1235",Unit.NOUNIT2.toString(1234.6));
 | 
			
		||||
		assertEquals("1235",Unit.NOUNIT2.toString(1235.2));
 | 
			
		||||
		assertEquals("1236",Unit.NOUNIT2.toString(1235.5)); // round to even
 | 
			
		||||
		assertEquals("1236",Unit.NOUNIT2.toString(1235.6));
 | 
			
		||||
		assertEquals("1234", Unit.NOUNIT.toString(1234.2));
 | 
			
		||||
		assertEquals("1234", Unit.NOUNIT.toString(1234.5)); // round to even
 | 
			
		||||
		assertEquals("1235", Unit.NOUNIT.toString(1234.6));
 | 
			
		||||
		assertEquals("1235", Unit.NOUNIT.toString(1235.2));
 | 
			
		||||
		assertEquals("1236", Unit.NOUNIT.toString(1235.5)); // round to even
 | 
			
		||||
		assertEquals("1236", Unit.NOUNIT.toString(1235.6));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("123457",Unit.NOUNIT2.toString(123456.789));
 | 
			
		||||
		assertEquals("123457", Unit.NOUNIT.toString(123456.789));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("1000000",Unit.NOUNIT2.toString(1000000)); // boundary check
 | 
			
		||||
		assertEquals("1000000", Unit.NOUNIT.toString(1000000)); // boundary check
 | 
			
		||||
		
 | 
			
		||||
		// positive numbers > 1E6
 | 
			
		||||
		assertEquals("1.23E6",Unit.NOUNIT2.toString(1234567.89));
 | 
			
		||||
		assertEquals("1.23E7",Unit.NOUNIT2.toString(12345678.9));
 | 
			
		||||
		assertEquals("1.23E6", Unit.NOUNIT.toString(1234567.89));
 | 
			
		||||
		assertEquals("1.23E7", Unit.NOUNIT.toString(12345678.9));
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
		// Inch precision
 | 
			
		||||
		assertEquals("25.125", UnitGroup.UNITS_LENGTH.findApproximate("in").toString(25.125 * 25.4 / 1000));
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Test
 | 
			
		||||
	public void testNegativeToString() {
 | 
			
		||||
		// very small negative numbers ( < 0.0005) are returned as "0"
 | 
			
		||||
		assertEquals("0",Unit.NOUNIT2.toString(-0.00040));
 | 
			
		||||
		assertEquals("0",Unit.NOUNIT2.toString(-0.00050)); // check boundary of change in format
 | 
			
		||||
		assertEquals("0", Unit.NOUNIT.toString(-0.00040));
 | 
			
		||||
		assertEquals("0", Unit.NOUNIT.toString(-0.00050)); // check boundary of change in format
 | 
			
		||||
		
 | 
			
		||||
		// negative number < 0.095 use 3 digit decimal format
 | 
			
		||||
		assertEquals("-0.001",Unit.NOUNIT2.toString(-0.00051));  // check boundary of change in format
 | 
			
		||||
		assertEquals("-0.001",Unit.NOUNIT2.toString(-0.00060));
 | 
			
		||||
		assertEquals("-0.001", Unit.NOUNIT.toString(-0.00051)); // check boundary of change in format
 | 
			
		||||
		assertEquals("-0.001", Unit.NOUNIT.toString(-0.00060));
 | 
			
		||||
		
 | 
			
		||||
		// rounding at third digit.
 | 
			
		||||
		assertEquals("-0.001",Unit.NOUNIT2.toString(-0.0014));
 | 
			
		||||
		assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0015));  // round to even
 | 
			
		||||
		assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0016));
 | 
			
		||||
		assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0024));
 | 
			
		||||
		assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0025)); // round to even
 | 
			
		||||
		assertEquals("-0.003",Unit.NOUNIT2.toString(-0.0026));
 | 
			
		||||
		assertEquals("-0.009",Unit.NOUNIT2.toString(-0.0094));
 | 
			
		||||
		assertEquals("-0.001", Unit.NOUNIT.toString(-0.0014));
 | 
			
		||||
		assertEquals("-0.002", Unit.NOUNIT.toString(-0.0015)); // round to even
 | 
			
		||||
		assertEquals("-0.002", Unit.NOUNIT.toString(-0.0016));
 | 
			
		||||
		assertEquals("-0.002", Unit.NOUNIT.toString(-0.0024));
 | 
			
		||||
		assertEquals("-0.002", Unit.NOUNIT.toString(-0.0025)); // round to even
 | 
			
		||||
		assertEquals("-0.003", Unit.NOUNIT.toString(-0.0026));
 | 
			
		||||
		assertEquals("-0.009", Unit.NOUNIT.toString(-0.0094));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-0.01",Unit.NOUNIT2.toString(-0.0095));  // no trailing zeros after rounding
 | 
			
		||||
		assertEquals("-0.01", Unit.NOUNIT.toString(-0.0095)); // no trailing zeros after rounding
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-0.011",Unit.NOUNIT2.toString(-0.0114));
 | 
			
		||||
		assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0115)); // round to even
 | 
			
		||||
		assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0119));
 | 
			
		||||
		assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0124));
 | 
			
		||||
		assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0125)); // round to even
 | 
			
		||||
		assertEquals("-0.013",Unit.NOUNIT2.toString(-0.0129));
 | 
			
		||||
		assertEquals("-0.011", Unit.NOUNIT.toString(-0.0114));
 | 
			
		||||
		assertEquals("-0.012", Unit.NOUNIT.toString(-0.0115)); // round to even
 | 
			
		||||
		assertEquals("-0.012", Unit.NOUNIT.toString(-0.0119));
 | 
			
		||||
		assertEquals("-0.012", Unit.NOUNIT.toString(-0.0124));
 | 
			
		||||
		assertEquals("-0.012", Unit.NOUNIT.toString(-0.0125)); // round to even
 | 
			
		||||
		assertEquals("-0.013", Unit.NOUNIT.toString(-0.0129));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-0.095",Unit.NOUNIT2.toString(-0.0949)); // boundary check
 | 
			
		||||
		assertEquals("-0.095", Unit.NOUNIT.toString(-0.0949)); // boundary check
 | 
			
		||||
		
 | 
			
		||||
		// negative numbers < 100 
 | 
			
		||||
		assertEquals("-0.1",Unit.NOUNIT2.toString(-0.095)); // boundary check
 | 
			
		||||
		assertEquals("-0.01", Unit.NOUNIT.toString(-0.0095)); // boundary check
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-0.11",Unit.NOUNIT2.toString(-0.111));
 | 
			
		||||
		assertEquals("-0.12",Unit.NOUNIT2.toString(-0.115)); // round to even
 | 
			
		||||
		assertEquals("-0.12",Unit.NOUNIT2.toString(-0.117));
 | 
			
		||||
		assertEquals("-0.12",Unit.NOUNIT2.toString(-0.121));
 | 
			
		||||
		assertEquals("-0.12",Unit.NOUNIT2.toString(-0.125)); // round to even
 | 
			
		||||
		assertEquals("-0.13",Unit.NOUNIT2.toString(-0.127));
 | 
			
		||||
		assertEquals("-0.111", Unit.NOUNIT.toString(-0.1111));
 | 
			
		||||
		assertEquals("-0.112", Unit.NOUNIT.toString(-0.1115)); // round to even
 | 
			
		||||
		assertEquals("-0.112", Unit.NOUNIT.toString(-0.1117));
 | 
			
		||||
		assertEquals("-0.112", Unit.NOUNIT.toString(-0.1121));
 | 
			
		||||
		assertEquals("-0.112", Unit.NOUNIT.toString(-0.1125)); // round to even
 | 
			
		||||
		assertEquals("-0.113", Unit.NOUNIT.toString(-0.1127));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-1.11",Unit.NOUNIT2.toString(-1.113));
 | 
			
		||||
		assertEquals("-1.12",Unit.NOUNIT2.toString(-1.115)); // round to even
 | 
			
		||||
		assertEquals("-1.12",Unit.NOUNIT2.toString(-1.117));
 | 
			
		||||
		assertEquals("-1.12",Unit.NOUNIT2.toString(-1.123));
 | 
			
		||||
		assertEquals("-1.12",Unit.NOUNIT2.toString(-1.125)); // round to even
 | 
			
		||||
		assertEquals("-1.13",Unit.NOUNIT2.toString(-1.127));
 | 
			
		||||
		assertEquals("-1.11", Unit.NOUNIT.toString(-1.113));
 | 
			
		||||
		assertEquals("-1.12", Unit.NOUNIT.toString(-1.115)); // round to even
 | 
			
		||||
		assertEquals("-1.12", Unit.NOUNIT.toString(-1.117));
 | 
			
		||||
		assertEquals("-1.12", Unit.NOUNIT.toString(-1.123));
 | 
			
		||||
		assertEquals("-1.12", Unit.NOUNIT.toString(-1.125)); // round to even
 | 
			
		||||
		assertEquals("-1.13", Unit.NOUNIT.toString(-1.127));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-12.3",Unit.NOUNIT2.toString(-12.320));
 | 
			
		||||
		assertEquals("-12.4",Unit.NOUNIT2.toString(-12.350)); // round to even
 | 
			
		||||
		assertEquals("-12.4",Unit.NOUNIT2.toString(-12.355));
 | 
			
		||||
		assertEquals("-12.4",Unit.NOUNIT2.toString(-12.420));
 | 
			
		||||
		assertEquals("-12.4",Unit.NOUNIT2.toString(-12.450)); // round to even
 | 
			
		||||
		assertEquals("-12.5",Unit.NOUNIT2.toString(-12.455));
 | 
			
		||||
		assertEquals("-12.3", Unit.NOUNIT.toString(-12.320));
 | 
			
		||||
		assertEquals("-12.4", Unit.NOUNIT.toString(-12.350)); // round to even
 | 
			
		||||
		assertEquals("-12.4", Unit.NOUNIT.toString(-12.355));
 | 
			
		||||
		assertEquals("-12.4", Unit.NOUNIT.toString(-12.420));
 | 
			
		||||
		assertEquals("-12.4", Unit.NOUNIT.toString(-12.450)); // round to even
 | 
			
		||||
		assertEquals("-12.5", Unit.NOUNIT.toString(-12.455));
 | 
			
		||||
		
 | 
			
		||||
		// negative numbers <= 1E6
 | 
			
		||||
		assertEquals("-123",Unit.NOUNIT2.toString(-123.20));
 | 
			
		||||
		assertEquals("-124",Unit.NOUNIT2.toString(-123.50)); // round to even
 | 
			
		||||
		assertEquals("-124",Unit.NOUNIT2.toString(-123.55));
 | 
			
		||||
		assertEquals("-124",Unit.NOUNIT2.toString(-124.20));
 | 
			
		||||
		assertEquals("-124",Unit.NOUNIT2.toString(-124.50)); // round to even
 | 
			
		||||
		assertEquals("-125",Unit.NOUNIT2.toString(-124.55));
 | 
			
		||||
		assertEquals("-123", Unit.NOUNIT.toString(-123.20));
 | 
			
		||||
		assertEquals("-124", Unit.NOUNIT.toString(-123.50)); // round to even
 | 
			
		||||
		assertEquals("-124", Unit.NOUNIT.toString(-123.55));
 | 
			
		||||
		assertEquals("-124", Unit.NOUNIT.toString(-124.20));
 | 
			
		||||
		assertEquals("-124", Unit.NOUNIT.toString(-124.50)); // round to even
 | 
			
		||||
		assertEquals("-125", Unit.NOUNIT.toString(-124.55));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-1234",Unit.NOUNIT2.toString(-1234.2));
 | 
			
		||||
		assertEquals("-1234",Unit.NOUNIT2.toString(-1234.5)); // round to even
 | 
			
		||||
		assertEquals("-1235",Unit.NOUNIT2.toString(-1234.6));
 | 
			
		||||
		assertEquals("-1235",Unit.NOUNIT2.toString(-1235.2));
 | 
			
		||||
		assertEquals("-1236",Unit.NOUNIT2.toString(-1235.5)); // round to even
 | 
			
		||||
		assertEquals("-1236",Unit.NOUNIT2.toString(-1235.6));
 | 
			
		||||
		assertEquals("-1234", Unit.NOUNIT.toString(-1234.2));
 | 
			
		||||
		assertEquals("-1234", Unit.NOUNIT.toString(-1234.5)); // round to even
 | 
			
		||||
		assertEquals("-1235", Unit.NOUNIT.toString(-1234.6));
 | 
			
		||||
		assertEquals("-1235", Unit.NOUNIT.toString(-1235.2));
 | 
			
		||||
		assertEquals("-1236", Unit.NOUNIT.toString(-1235.5)); // round to even
 | 
			
		||||
		assertEquals("-1236", Unit.NOUNIT.toString(-1235.6));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-123457",Unit.NOUNIT2.toString(-123456.789));
 | 
			
		||||
		assertEquals("-123457", Unit.NOUNIT.toString(-123456.789));
 | 
			
		||||
		
 | 
			
		||||
		assertEquals("-1000000",Unit.NOUNIT2.toString(-1000000)); // boundary check
 | 
			
		||||
		assertEquals("-1000000", Unit.NOUNIT.toString(-1000000)); // boundary check
 | 
			
		||||
		
 | 
			
		||||
		// negative numbers > 1E6
 | 
			
		||||
		assertEquals("-1.23E6",Unit.NOUNIT2.toString(-1234567.89));
 | 
			
		||||
		assertEquals("-1.23E7",Unit.NOUNIT2.toString(-12345678.9));
 | 
			
		||||
		assertEquals("-1.23E6", Unit.NOUNIT.toString(-1234567.89));
 | 
			
		||||
		assertEquals("-1.23E7", Unit.NOUNIT.toString(-12345678.9));
 | 
			
		||||
		
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user