Rafael, vou te falar de algumas modificações que eu fiz:
Parece que RoundingMode.HALF_EVEN é java 1.5, logo tive que usar BigDecimal.ROUND_HALF_EVEN quando necessário.
Penso seriamente em deixa o convertTo ao gosto do usuário, pois assim ele escolhe:
public UnitWithValue convertTo(Unit unit,int scale,int roundingmode) {
return new Area(base.divide(unit.getValueOnBaseUnit(),scale,roundingmode),unit);
}
Não se preocupe que eu uso o String.valueOf para manter a retrocompatibilidade nas interfaces:
public interface AreaMetrics {
//A base é Metros Quadrados /*Square Metric is the unit base */
Unit M2 = new Unit("m²", new BigDecimal(String.valueOf(1)));
Unit ACRE=new Unit( "acre",new BigDecimal(String.valueOf(4046.8564224) ));
Unit ARES=new Unit("ares",new BigDecimal(String.valueOf(100)));
Vc preferiria a manutenção do convertTo isolado?Exemplo com as 2 formas:
import java.math.BigDecimal;
//import org.brazilutils.metrics.*;
public class Area implements UnitWithValue,AreaMetrics {
private static final long serialVersionUID = 210046788217078583L;
private Unit unit;
private BigDecimal value;
private BigDecimal base;
public Area(BigDecimal value,Unit unit,int roudingMode,int scale){
this.base = value.multiply(unit.getValueOnBaseUnit());//,roudingMode,scale);
this.value = value;
this.unit = unit;
}
public Area(BigDecimal value,Unit unit){
this.base = value.multiply(unit.getValueOnBaseUnit());
this.value = value;
this.unit = unit;
}
public String toString() {
return "[value= " + value + ",unit= " + unit + ",base= " + base + "]";
}
public UnitWithValue convertTo(Unit unit,int scale,int roundingmode) {
return new Area(base.divide(unit.getValueOnBaseUnit(),scale,roundingmode),unit);
}
public UnitWithValue convertTo(Unit unit){
return new Area(base.divide(unit.getValueOnBaseUnit(), 34, BigDecimal.ROUND_HALF_EVEN), unit);
}
public Unit getUnit(){
return unit;
}
public void setUnit(Unit u) {
this.unit = u;
this.value = base.divide(unit.getValueOnBaseUnit());//, int round);
}
public static void main(String[] args) {
Area area1 = new Area(new BigDecimal(10000), Area.M2);
System.out.println(area1);
System.out.println(area1.convertTo(Area.HECTARE,34, BigDecimal.ROUND_HALF_EVEN));
System.out.println(area1.convertTo(Area.ACRE));
}
}