NumOfDecimals is now enabled when Percentual=1 in STRING meter.

This commit is contained in:
spx 2010-09-15 12:52:40 +00:00
parent 6fe8fd0aa7
commit 5ab0192d41
2 changed files with 17 additions and 7 deletions

View File

@ -510,7 +510,17 @@ const WCHAR* CMeasure::GetStringValue(bool autoScale, double scale, int decimals
if(percentual) if(percentual)
{ {
swprintf(buffer, L"%i", (UINT)(100.0 * GetRelativeValue())); double val = 100.0 * GetRelativeValue();
if (decimals == 0)
{
swprintf(buffer, L"%i", (UINT)val);
}
else
{
swprintf(format, L"%%.%if", decimals);
swprintf(buffer, format, val);
}
} }
else if(autoScale) else if(autoScale)
{ {
@ -518,15 +528,16 @@ const WCHAR* CMeasure::GetStringValue(bool autoScale, double scale, int decimals
} }
else else
{ {
double val = GetValue() * (1.0 / scale);
if(decimals == 0) if(decimals == 0)
{ {
double val = GetValue() * (1.0 / scale);
val += (val >= 0) ? 0.5 : -0.5; val += (val >= 0) ? 0.5 : -0.5;
swprintf(buffer, L"%lli", (LONGLONG)val); swprintf(buffer, L"%lli", (LONGLONG)val);
} }
else if (decimals == -1) else if (decimals == -1)
{ {
swprintf(buffer, L"%.5f", GetValue() * (1.0 / scale)); swprintf(buffer, L"%.5f", val);
size_t len = wcslen(buffer); size_t len = wcslen(buffer);
if (len >= 6 && wcscmp(buffer + len - 6, L".00000") == 0) if (len >= 6 && wcscmp(buffer + len - 6, L".00000") == 0)
@ -537,7 +548,7 @@ const WCHAR* CMeasure::GetStringValue(bool autoScale, double scale, int decimals
else else
{ {
swprintf(format, L"%%.%if", decimals); swprintf(format, L"%%.%if", decimals);
swprintf(buffer, format, GetValue() * (1.0 / scale)); swprintf(buffer, format, val);
} }
} }

View File

@ -272,7 +272,7 @@ void CMeterString::ReadConfig(const WCHAR* section)
std::wstring scale; std::wstring scale;
scale = parser.ReadString(section, L"Scale", L"1"); scale = parser.ReadString(section, L"Scale", L"1");
if (wcschr(scale.c_str(), '.') == NULL) if (scale.find(L'.') == std::wstring::npos)
{ {
m_NoDecimals = true; m_NoDecimals = true;
} }
@ -396,8 +396,7 @@ bool CMeterString::Update()
{ {
std::vector<std::wstring> stringValues; std::vector<std::wstring> stringValues;
int decimals = (m_NoDecimals && !m_AutoScale) ? 0 : 1; int decimals = (m_NumOfDecimals != -1) ? m_NumOfDecimals : (m_NoDecimals && (m_Percentual || !m_AutoScale)) ? 0 : 1;
if (m_NumOfDecimals != -1) decimals = m_NumOfDecimals;
if (m_Measure) stringValues.push_back(m_Measure->GetStringValue(m_AutoScale, m_Scale, decimals, m_Percentual)); if (m_Measure) stringValues.push_back(m_Measure->GetStringValue(m_AutoScale, m_Scale, decimals, m_Percentual));