Make Unit string output parsably and add Pascale and Newtons

This commit is contained in:
jriegel
2013-11-10 15:38:23 +01:00
parent fab8d7d70b
commit ac9395d113
5 changed files with 331 additions and 258 deletions

View File

@@ -174,42 +174,59 @@ std::string Unit::getString(void) const
Sig.AmountOfSubstance > 0 ||
Sig.LuminoseIntensity > 0 ||
Sig.Angle > 0 ){
bool mult = false;
if(Sig.Length > 0){
mult = true;
ret << "mm";
if(Sig.Length >1)
ret << "^" << Sig.Length;
}
if(Sig.Mass > 0){
if(mult) ret<<'*';
mult = true;
ret << "kg";
if(Sig.Mass >1)
ret << "^" << Sig.Mass;
}
if(Sig.Time > 0){
if(mult) ret<<'*';
mult = true;
ret << "s";
if(Sig.Time >1)
ret << "^" << Sig.Time;
}
if(Sig.ElectricCurrent > 0){
if(mult) ret<<'*';
mult = true;
ret << "A";
if(Sig.ElectricCurrent >1)
ret << "^" << Sig.ElectricCurrent;
}
if(Sig.ThermodynamicTemperature > 0){
if(mult) ret<<'*';
mult = true;
ret << "K";
if(Sig.ThermodynamicTemperature >1)
ret << "^" << Sig.ThermodynamicTemperature;
}
if(Sig.AmountOfSubstance > 0){
if(mult) ret<<'*';
mult = true;
ret << "mol";
if(Sig.AmountOfSubstance >1)
ret << "^" << Sig.AmountOfSubstance;
}
if(Sig.LuminoseIntensity > 0){
if(mult) ret<<'*';
mult = true;
ret << "cd";
if(Sig.LuminoseIntensity >1)
ret << "^" << Sig.LuminoseIntensity;
}
if(Sig.Angle > 0){
if(mult) ret<<'*';
mult = true;
ret << "deg";
if(Sig.Angle >1)
ret << "^" << Sig.Angle;
@@ -227,46 +244,73 @@ std::string Unit::getString(void) const
Sig.LuminoseIntensity < 0 ||
Sig.Angle < 0 ){
ret << "/";
int nnom = Sig.Length<0?1:2 +
Sig.Mass<0?1:2 +
Sig.Time<0?1:2 +
Sig.ElectricCurrent<0?1:2 +
Sig.ThermodynamicTemperature<0?1:2 +
Sig.AmountOfSubstance<0?1:2 +
Sig.LuminoseIntensity<0?1:2 +
Sig.Angle<0?1:2 ;
if (nnom > 1) ret << '(';
bool mult=false;
if(Sig.Length < 0){
ret << "mm";
mult = true;
if(Sig.Length <-1)
ret << "^" << abs(Sig.Length);
}
if(Sig.Mass < 0){
ret << "kg";
if(mult) ret<<'*';
mult = true;
ret << "kg";
if(Sig.Mass <-1)
ret << "^" << abs(Sig.Mass);
}
if(Sig.Time < 0){
if(mult) ret<<'*';
mult = true;
ret << "s";
if(Sig.Time <-1)
ret << "^" << abs(Sig.Time);
}
if(Sig.ElectricCurrent < 0){
if(mult) ret<<'*';
mult = true;
ret << "A";
if(Sig.ElectricCurrent <-1)
ret << "^" << abs(Sig.ElectricCurrent);
}
if(Sig.ThermodynamicTemperature < 0){
if(mult) ret<<'*';
mult = true;
ret << "K";
if(Sig.ThermodynamicTemperature <-1)
ret << "^" << abs(Sig.ThermodynamicTemperature);
}
if(Sig.AmountOfSubstance < 0){
if(mult) ret<<'*';
mult = true;
ret << "mol";
if(Sig.AmountOfSubstance <-1)
ret << "^" << abs(Sig.AmountOfSubstance);
}
if(Sig.LuminoseIntensity < 0){
if(mult) ret<<'*';
mult = true;
ret << "cd";
if(Sig.LuminoseIntensity <-1)
ret << "^" << abs(Sig.LuminoseIntensity);
}
if(Sig.Angle < 0){
if(mult) ret<<'*';
mult = true;
ret << "deg";
if(Sig.Angle <-1)
ret << "^" << abs(Sig.Angle);
}
if (nnom > 1) ret << ')';
}
return ret.str();