diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter.UnitTest/UnitHandlerTests.cs b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter.UnitTest/UnitHandlerTests.cs
index f7ef57fdc2..5b1988cb1c 100644
--- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter.UnitTest/UnitHandlerTests.cs
+++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter.UnitTest/UnitHandlerTests.cs
@@ -26,6 +26,14 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter.UnitTest
Assert.AreEqual(100, result);
}
+ [TestMethod]
+ public void HandleNanometerToKilometer()
+ {
+ var convertModel = new ConvertModel(1, "nanometer", "kilometer");
+ double result = UnitHandler.ConvertInput(convertModel, UnitsNet.QuantityType.Length);
+ Assert.AreEqual(1E-12, result);
+ }
+
[TestMethod]
public void HandlesByteCapitals()
{
@@ -34,6 +42,26 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter.UnitTest
Assert.AreEqual(8, result);
}
+ [TestMethod]
+ public void HandlesParsecToNanometer()
+ {
+ var convertModel = new ConvertModel(1, "parsec", "nanometer");
+ var result = UnitHandler.Convert(convertModel).Single();
+ var str = result.ToString(System.Globalization.CultureInfo.InvariantCulture);
+ Assert.AreEqual(3.0857000000000004E+25, result.ConvertedValue);
+ Assert.AreEqual("3.0857e+25 nanometer", str);
+ }
+
+ [TestMethod]
+ public void HandlesNanometerToParsec()
+ {
+ var convertModel = new ConvertModel(1, "nanometer", "parsec");
+ var result = UnitHandler.Convert(convertModel).Single();
+ var str = result.ToString(System.Globalization.CultureInfo.InvariantCulture);
+ Assert.AreEqual(3.2408000000000005E-26, result.ConvertedValue);
+ Assert.AreEqual("3.2408e-26 parsec", str);
+ }
+
[TestMethod]
public void HandleInvalidModel()
{
@@ -41,5 +69,47 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter.UnitTest
var results = UnitHandler.Convert(convertModel);
Assert.AreEqual(0, results.Count());
}
+
+ [TestMethod]
+ public void RoundZero()
+ {
+ double result = UnitHandler.Round(0.0);
+ Assert.AreEqual(0, result);
+ }
+
+ [TestMethod]
+ public void RoundNormalValue()
+ {
+ double result = UnitHandler.Round(3.141592653589793);
+ Assert.AreEqual(3.1416, result);
+ }
+
+ [TestMethod]
+ public void RoundSmallValue()
+ {
+ double result = UnitHandler.Round(1.23456789012345E-16);
+ Assert.AreEqual(1.2346E-16, result);
+ }
+
+ [TestMethod]
+ public void RoundBigValue()
+ {
+ double result = UnitHandler.Round(1234567890123456.0);
+ Assert.AreEqual(1234600000000000.0, result);
+ }
+
+ [TestMethod]
+ public void RoundNegativeValue()
+ {
+ double result = UnitHandler.Round(-3.141592653589793);
+ Assert.AreEqual(-3.1416, result);
+ }
+
+ [TestMethod]
+ public void RoundNinesValue()
+ {
+ double result = UnitHandler.Round(999999999999.9998);
+ Assert.AreEqual(1000000000000.0, result);
+ }
}
}
diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Main.cs b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Main.cs
index d7239d561a..6d1638d264 100644
--- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Main.cs
+++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Main.cs
@@ -62,7 +62,7 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
return new Result
{
ContextData = result,
- Title = $"{result.ConvertedValue} {result.UnitName}",
+ Title = result.ToString(),
IcoPath = _icon_path,
Score = 300,
SubTitle = string.Format(CultureInfo.CurrentCulture, Properties.Resources.copy_to_clipboard, result.QuantityType),
@@ -73,7 +73,7 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
{
try
{
- Clipboard.SetText(result.ConvertedValue.ToString(CultureInfo.CurrentCulture));
+ Clipboard.SetText(result.ConvertedValue.ToString(UnitConversionResult.Format, CultureInfo.CurrentCulture));
ret = true;
}
catch (ExternalException)
@@ -105,7 +105,7 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
{
try
{
- Clipboard.SetText(result.ConvertedValue.ToString(CultureInfo.CurrentCulture));
+ Clipboard.SetText(result.ConvertedValue.ToString(UnitConversionResult.Format, CultureInfo.CurrentCulture));
ret = true;
}
catch (ExternalException)
diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitConversionResult.cs b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitConversionResult.cs
index 75de4bdb6e..9079b27bf2 100644
--- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitConversionResult.cs
+++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitConversionResult.cs
@@ -8,6 +8,8 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
{
public class UnitConversionResult
{
+ public static string Format { get; set; } = "g14";
+
public double ConvertedValue { get; }
public string UnitName { get; }
@@ -20,5 +22,15 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
UnitName = unitName;
QuantityType = quantityType;
}
+
+ public string ToString(System.IFormatProvider provider = null)
+ {
+ if (provider == null)
+ {
+ provider = System.Globalization.CultureInfo.CurrentCulture;
+ }
+
+ return ConvertedValue.ToString(Format, provider) + " " + UnitName;
+ }
}
}
diff --git a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitHandler.cs b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitHandler.cs
index 63d51c6ac7..d80790d888 100644
--- a/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitHandler.cs
+++ b/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/UnitHandler.cs
@@ -51,6 +51,23 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
return null;
}
+ ///
+ /// Rounds the value to the predefined number of significant digits.
+ ///
+ /// Value to be rounded
+ public static double Round(double value)
+ {
+ if (value == 0.0D)
+ {
+ return 0;
+ }
+
+ var power = Math.Floor(Math.Log10(Math.Abs(value)));
+ var exponent = Math.Pow(10, power);
+ var rounded = Math.Round(value / exponent, _roundingFractionalDigits) * exponent;
+ return rounded;
+ }
+
///
/// Given parsed ConvertModel, computes result. (E.g "1 foot in cm").
///
@@ -83,7 +100,7 @@ namespace Community.PowerToys.Run.Plugin.UnitConverter
if (!double.IsNaN(convertedValue))
{
- UnitConversionResult result = new UnitConversionResult(Math.Round(convertedValue, _roundingFractionalDigits), convertModel.ToUnit, quantityType);
+ UnitConversionResult result = new UnitConversionResult(Round(convertedValue), convertModel.ToUnit, quantityType);
results.Add(result);
}
}