swift
measurementunit.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QLocale>
7 
8 #include "misc/math/mathutils.h"
9 
10 using namespace swift::misc::math;
11 
12 namespace swift::misc::physical_quantities
13 {
14  double CMeasurementUnit::convertFrom(double value, const CMeasurementUnit &unit) const
15  {
16  if (this->isNull() || unit.isNull()) return 0;
17  if (m_data->m_toDefault == unit.m_data->m_toDefault && m_data->m_fromDefault == unit.m_data->m_fromDefault)
18  return value;
19  return m_data->m_fromDefault(unit.m_data->m_toDefault(value));
20  }
21 
22  QString CMeasurementUnit::makeRoundedQStringWithUnit(double value, int digits, bool withGroupSeparator,
23  bool i18n) const
24  {
25  return this->makeRoundedQString(value, digits, withGroupSeparator).append(this->getSymbol(i18n));
26  }
27 
28  double CMeasurementUnit::roundValue(double value, int digits) const
29  {
30  if (digits < 0) { digits = m_data->m_displayDigits; }
31  return CMathUtils::round(value, digits);
32  }
33 
34  double CMeasurementUnit::roundToEpsilon(double value) const
35  {
36  if (qFuzzyIsNull(getEpsilon()) || this->isNull()) { return value; }
37  return CMathUtils::roundEpsilon(value, this->getEpsilon());
38  }
39 
40  QString CMeasurementUnit::makeRoundedQString(double value, int digits, bool withGroupSeparator, bool i18n) const
41  {
42  Q_UNUSED(i18n);
43  if (digits < 0) { digits = m_data->m_displayDigits; }
44  const double v = CMathUtils::round(value, digits);
45 
46  // create locale without separator
47  static const QLocale localeWithoutSeparator = [] {
48  QLocale q = QLocale::system();
49  q.setNumberOptions(QLocale::OmitGroupSeparator);
50  return q;
51  }();
52 
53  const QString s = (withGroupSeparator ? QLocale::system() : localeWithoutSeparator).toString(v, 'f', digits);
54  return s;
55  }
56 } // namespace swift::misc::physical_quantities
static double round(double value, int digits)
Utility round method.
Definition: mathutils.cpp:18
static double roundEpsilon(double value, double epsilon)
Round by given epsilon.
Definition: mathutils.cpp:30
Base class for all units, such as meter, hertz.
ConverterFunction m_toDefault
convert from this unit to default unit
ConverterFunction m_fromDefault
convert to this unit from default unit