/*! \file piunits_prefix.h * \ingroup Core * \~\brief * \~english Unit prefixes * \~russian Префиксы единиц измерения */ /* PIP - Platform Independent Primitives Unit prefix Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PIUNITS_PREFIX_H #define PIUNITS_PREFIX_H #include "pistring.h" namespace PIUnits { class PIP_EXPORT Prefix { friend class Value; public: enum { None, Deca = 0x100, // da 10^1 10 Hecto, // h 10^2 100 Kilo, // k 10^3 1000 Mega, // M 10^6 1000000 Giga, // G 10^9 1000000000 Tera, // T 10^12 1000000000000 Peta, // P 10^15 1000000000000000 Exa, // E 10^18 1000000000000000000 Zetta, // Z 10^21 1000000000000000000000 Yotta, // Y 10^24 1000000000000000000000000 Ronna, // R 10^27 1000000000000000000000000000 Quetta, // Q 10^30 1000000000000000000000000000000 Deci = 0x200, // d 10^−1 0.1 Centi, // c 10^−2 0.01 Milli, // m 10^−3 0.001 Micro, // μ 10^−6 0.000001 Nano, // n 10^−9 0.000000001 Pico, // p 10^−12 0.000000000001 Femto, // f 10^−15 0.000000000000001 Atto, // a 10^−18 0.000000000000000001 Zepto, // z 10^−21 0.000000000000000000001 Yocto, // y 10^−24 0.000000000000000000000001 Ronto, // r 10^−27 0.000000000000000000000000001 }; static PIString name(int prefix); static PIString prefix(int prefix); static double multiplier(int prefix); private: Prefix(); NO_COPY_CLASS(Prefix); static Prefix & instance(); static PIString valueToString(double v, void * type_class, int type, char format = 'g', int prec = 5); struct P { PIString name; PIString prefix; int pow; double divider; bool non3; }; const P getPrefix(int p) const; const P getPrefixForValue(double v, bool use_non3, bool use_greater, bool use_smaller) const; PIMap prefixes; PIMap prefixes_by_pow; P def_prefix; }; } // namespace PIUnits #endif