From a88a3a3f58c9a64d954778b57c6449266f36bf33 Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Sat, 26 Jan 2019 12:43:48 -0500 Subject: [PATCH] Add SI prefixes parsing to Quantity::setDisplayValue --- src/ui/Quantity.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/ui/Quantity.cpp b/src/ui/Quantity.cpp index b74ade6e..6f944de2 100644 --- a/src/ui/Quantity.cpp +++ b/src/ui/Quantity.cpp @@ -14,10 +14,23 @@ std::string Quantity::getDisplayValueString() { } void Quantity::setDisplayValueString(std::string s) { - float displayValue = 0.f; - int n = std::sscanf(s.c_str(), "%f", &displayValue); - if (n == 1) - setDisplayValue(displayValue); + float v = 0.f; + char suffix[2]; + int n = std::sscanf(s.c_str(), "%f%1s", &v, suffix); + if (n >= 2) { + // Parse SI prefixes + switch (suffix[0]) { + case 'n': v *= 1e-9f; break; + case 'u': v *= 1e-6f; break; + case 'm': v *= 1e-3f; break; + case 'k': v *= 1e3f; break; + case 'M': v *= 1e6f; break; + case 'G': v *= 1e9f; break; + default: break; + } + } + if (n >= 1) + setDisplayValue(v); } std::string Quantity::getString() {