Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 7eea88d0 authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

adapt formatting of FC output in xml reports

parent ab1f02d1
No related branches found
No related tags found
No related merge requests found
......@@ -268,6 +268,20 @@ namespace TUGraz.VectoCommon.Utils
decimals = decimals ?? 2;
return self.ToString("F" + decimals.Value);
}
//[DebuggerStepThrough]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string ToMinSignificantDigits(this double self, uint? significant = null, uint? decimals = null)
{
significant = significant ?? 3;
decimals = decimals ?? 1;
var scale = Math.Ceiling(Math.Log10(Math.Abs(self)));
if (double.IsInfinity(scale) || double.IsNaN(scale))
return self.ToString("F" + decimals.Value);
return self.ToString("F" + Math.Max(significant.Value - scale, decimals.Value));
}
}
public static class FloatExtensionMethods
......
......@@ -155,43 +155,44 @@ namespace TUGraz.VectoCore.OutputData.XML
var retVal = new List<XElement>();
//FC
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "g/km"),
(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).ToXMLFormat(1)));
(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value()
.ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "g/t-km"),
(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter /
result.Payload.ConvertTo().Ton).ToXMLFormat(1)));
result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "g/m³-km"),
(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume)
.ToXMLFormat(1)));
(result.FuelConsumptionTotal.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume).Value()
.ToMinSignificantDigits(3, 1)));
if (fullOutput) {
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "MJ/km"),
(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / 1e6)
.ToXMLFormat(1)));
(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / 1e6).Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "MJ/t-km"),
(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.Payload.ConvertTo().Ton / 1e6)
.ToXMLFormat(1)));
.Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "MJ/m³-km"),
(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume / 1e6).ToXMLFormat(1)));
(result.EnergyConsumptionTotal / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume / 1e6).Value()
.ToMinSignificantDigits(3, 1)));
}
if (fuel.FuelDensity != null) {
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "l/100km"),
(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter * 100)
.ToXMLFormat(1)));
.Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "l/t-km"),
(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter /
result.Payload.ConvertTo().Ton).ToXMLFormat(1)));
result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "FuelConsumption", new XAttribute("unit", "l/m³-km"),
(result.FuelConsumptionTotal.ConvertTo().Gramm / fuel.FuelDensity / result.Distance.ConvertTo().Kilo.Meter /
result.CargoVolume).ToXMLFormat(1)));
result.CargoVolume).Value().ToMinSignificantDigits(3, 1)));
}
//CO2
retVal.Add(new XElement(tns + "CO2", new XAttribute("unit", "g/km"),
(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).ToXMLFormat(1)));
(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter).Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "CO2", new XAttribute("unit", "g/t-km"),
(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter /
result.Payload.ConvertTo().Ton).ToXMLFormat(1)));
result.Payload.ConvertTo().Ton).Value().ToMinSignificantDigits(3, 1)));
retVal.Add(new XElement(tns + "CO2", new XAttribute("unit", "g/m³-km"),
(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume)
.ToXMLFormat(1)));
(result.CO2Total.ConvertTo().Gramm / result.Distance.ConvertTo().Kilo.Meter / result.CargoVolume).Value()
.ToMinSignificantDigits(3, 1)));
return retVal;
}
......
......@@ -103,5 +103,27 @@ namespace TUGraz.VectoCore.Tests.Utils
Assert.IsTrue(0.999.IsSmallerOrEqual(1.0));
Assert.IsTrue(0.998.IsSmallerOrEqual(1.0));
}
[TestMethod]
public void TestStringFormatting()
{
Assert.AreEqual("0.452", 0.452345.ToMinSignificantDigits(3, 1));
Assert.AreEqual("4.52", 4.52345.ToMinSignificantDigits(3, 1));
Assert.AreEqual("45.2", 45.2345.ToMinSignificantDigits(3, 1));
Assert.AreEqual("0.0452", 0.0452345.ToMinSignificantDigits(3, 1));
Assert.AreEqual("0.00452", 0.00452345.ToMinSignificantDigits(3, 1));
Assert.AreEqual("-0.452", (-0.452345).ToMinSignificantDigits(3, 1));
Assert.AreEqual("-4.52", (-4.52345).ToMinSignificantDigits(3, 1));
Assert.AreEqual("-45.2", (-45.2345).ToMinSignificantDigits(3, 1));
Assert.AreEqual("-0.0452", (-0.0452345).ToMinSignificantDigits(3, 1));
Assert.AreEqual("-0.00452", (-0.00452345).ToMinSignificantDigits(3, 1));
Assert.AreEqual("0.0", 0.0.ToMinSignificantDigits(3, 1));
//Assert.AreEqual("45.2", 45.2345.ToMinSignificantDigits(3, 1));
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment