I have a units of measure library that I added string formatting to. Here is sample code:
[Test]
public void FormatSpeed()
{
var speed = Speed.FromMetresPerSecond(1.2);
using (Thread.CurrentThread.UsingTempCulture(CultureInfo.InvariantCulture))
{
Assert.AreEqual("1.20\u00A0m/s", speed.ToString("F2"));
Assert.AreEqual("1.20 m⋅s⁻¹", speed.ToString("F2 m⋅s⁻¹"));
Assert.AreEqual("1.2\u00A0m/s", speed.ToString());
Assert.AreEqual("1.2\u00A0m⋅s⁻¹", speed.ToString("m⋅s⁻¹"));
Assert.AreEqual("1200\u00A0mm⋅s⁻¹", speed.ToString("mm⋅s⁻¹"));
Assert.AreEqual("4.32\u00A0km/h", speed.ToString(SpeedUnit.KilometresPerHour));
Assert.AreEqual("4.3\u00A0km/h", speed.ToString("F1", SpeedUnit.KilometresPerHour));
}
var sv = CultureInfo.GetCultureInfo("sv-SE");
Assert.AreEqual("1,20\u00A0m/s", speed.ToString("F2", sv));
Assert.AreEqual("1,20 m⋅s⁻¹", speed.ToString("F2 m⋅s⁻¹", sv));
Assert.AreEqual("1,2\u00A0m/s", speed.ToString(sv));
Assert.AreEqual("1,2\u00A0m⋅s⁻¹", speed.ToString("m⋅s⁻¹", sv));
Assert.AreEqual("1200\u00A0mm⋅s⁻¹", speed.ToString("mm⋅s⁻¹", sv));
Assert.AreEqual("4,32\u00A0km/h", speed.ToString(SpeedUnit.KilometresPerHour, sv));
Assert.AreEqual("4,3\u00A0km/h", speed.ToString("F1", SpeedUnit.KilometresPerHour, sv));
}
[Test]
public void FormatAngle()
{
var angle = Angle.FromDegrees(1.2);
using (Thread.CurrentThread.UsingTempCulture(CultureInfo.InvariantCulture))
{
Assert.AreEqual("0.020943951023932\u00A0rad", angle.ToString());
Assert.AreEqual("1.200°", angle.ToString("F3°"));
Assert.AreEqual("1.2°", angle.ToString(AngleUnit.Degrees));
Assert.AreEqual(" 1.2 ° ", angle.ToString(" F1 ° "));
Assert.AreEqual(" 0.02 rad", angle.ToString(" F2 "));
Assert.AreEqual("1.200°", angle.ToString("F3", AngleUnit.Degrees));
Assert.AreEqual("0.02\u00A0rad", angle.ToString("F2", AngleUnit.Radians));
}
var sv = CultureInfo.GetCultureInfo("sv-SE");
Assert.AreEqual("0,020943951023932\u00A0rad", angle.ToString(sv));
Assert.AreEqual("1,200°", angle.ToString("F3°", sv));
Assert.AreEqual("1,2°", angle.ToString(AngleUnit.Degrees, sv));
Assert.AreEqual(" 1,2 ° ", angle.ToString(" F1 ° ", sv));
Assert.AreEqual(" 0,02 rad", angle.ToString(" F2 ", sv));
Assert.AreEqual("1,200°", angle.ToString("F3", AngleUnit.Degrees, sv));
Assert.AreEqual("0,02\u00A0rad", angle.ToString("F2", AngleUnit.Radians, sv));
}
1) What overloads make sense and what are missing if any?
2) I'm really not sure about if adding composite formats like F2 m⋅s⁻¹
where F2
is for the scalar value and m⋅s⁻¹
is for the unit is a good idea.
3) Is nobreaking space \u00A0
the best choice?
force.ToString("N");
Dunno why I did not think of that. Perhapslength.ToString("{0:N} {1:N}");
\$\endgroup\$