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
|
||||
@ -128,7 +138,7 @@ public abstract class Unit {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new Value object with the specified value and this unit.
|
||||
*
|
||||
@ -140,7 +150,7 @@ public abstract class Unit {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Round the value (in the current units) to a precision suitable for rough valuing
|
||||
* (approximately 2 significant numbers).
|
||||
|
@ -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);
|
||||
@ -346,7 +346,7 @@ public class UnitGroup {
|
||||
simap.put("m", UNITS_ALL_LENGTHS);
|
||||
simap.put("m^2", UNITS_AREA);
|
||||
simap.put("m/s", UNITS_VELOCITY);
|
||||
simap.put("m/s^2", UNITS_ACCELERATION);
|
||||
simap.put("m/s^2", UNITS_ACCELERATION);
|
||||
simap.put("kg", UNITS_MASS);
|
||||
simap.put("kg m^2", UNITS_INERTIA);
|
||||
simap.put("kg/m^3", UNITS_DENSITY_BULK);
|
||||
@ -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,26 +601,26 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -675,12 +675,12 @@ public class UnitGroup {
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int code = 0;
|
||||
for (Unit u : units){
|
||||
for (Unit u : units) {
|
||||
code = code + u.hashCode();
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A private class that switches the CaliberUnit to a rocket-specific CaliberUnit.
|
||||
* All other methods are passed through to UNITS_STABILITY.
|
||||
|
@ -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() {{
|
||||
|
@ -5,163 +5,166 @@ import static org.junit.Assert.assertEquals;
|
||||
import org.junit.Test;
|
||||
|
||||
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.01",Unit.NOUNIT2.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.095",Unit.NOUNIT2.toString(0.0949)); // boundary check
|
||||
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.NOUNIT.toString(0.0095)); // no trailing zeros after rounding
|
||||
|
||||
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.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.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.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.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));
|
||||
|
||||
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("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("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));
|
||||
|
||||
// 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("123457",Unit.NOUNIT2.toString(123456.789));
|
||||
|
||||
assertEquals("1000000",Unit.NOUNIT2.toString(1000000)); // boundary check
|
||||
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.NOUNIT.toString(123456.789));
|
||||
|
||||
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.01",Unit.NOUNIT2.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.095",Unit.NOUNIT2.toString(-0.0949)); // boundary check
|
||||
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.NOUNIT.toString(-0.0095)); // no trailing zeros after rounding
|
||||
|
||||
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.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.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.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.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));
|
||||
|
||||
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("-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("-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));
|
||||
|
||||
// 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("-123457",Unit.NOUNIT2.toString(-123456.789));
|
||||
|
||||
assertEquals("-1000000",Unit.NOUNIT2.toString(-1000000)); // boundary check
|
||||
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.NOUNIT.toString(-123456.789));
|
||||
|
||||
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