16 inline bool from_string(
const std::string& str, length& result)
20 if (std::sscanf(str.c_str(),
"%lf%s", &value,
unit) != 2)
24 result = 1_Gm * value;
25 else if (
unit ==
"Mm")
26 result = 1_Mm * value;
27 else if (
unit ==
"km")
28 result = 1_km * value;
31 else if (
unit ==
"dm")
32 result = 1_dm * value;
33 else if (
unit ==
"cm")
34 result = 1_cm * value;
35 else if (
unit ==
"mm")
36 result = 1_mm * value;
37 else if (
unit ==
"um")
38 result = 1_um * value;
39 else if (
unit ==
"nm")
40 result = 1_nm * value;
41 else if (
unit ==
"pm")
42 result = 1_pm * value;
53 if (std::sscanf(str.c_str(),
"%lf%s", &value,
unit) != 2)
57 result = 1_day * value;
58 else if (
unit ==
"h" ||
unit ==
"hrs")
60 else if (
unit ==
"m" ||
unit ==
"min")
61 result = 1_min * value;
62 else if (
unit ==
"s" ||
unit ==
"sec" ||
unit ==
"seconds")
64 else if (
unit ==
"ms")
65 result = 1_ms * value;
66 else if (
unit ==
"us")
67 result = 1_us * value;
68 else if (
unit ==
"ns")
69 result = 1_ns * value;
70 else if (
unit ==
"ps")
71 result = 1_ps * value;
82 if (std::sscanf(str.c_str(),
"%lf%s", &value,
unit) != 2)
86 result = 1_Gt * value;
87 else if (
unit ==
"Mt")
88 result = 1_Mt * value;
89 else if (
unit ==
"kt")
90 result = 1_kt * value;
93 else if (
unit ==
"kg")
94 result = 1_kg * value;
97 else if (
unit ==
"mg")
98 result = 1_mg * value;
99 else if (
unit ==
"ug")
100 result = 1_ug * value;
101 else if (
unit ==
"ng")
102 result = 1_ng * value;
110 inline std::string
_join(
long double quantity,
const char*
unit,
const char* formatString)
113 std::snprintf(buf,
sizeof(buf), formatString, quantity,
unit);
114 return std::string(buf);
122 if (d <= -1_Gpc || d >= 1_Gpc)
124 if (d <= -1_Mpc || d >= 1_Mpc)
126 if (d <= -1_kpc || d >= 1_kpc)
128 if (d <= -1_pc || d >= 1_pc)
130 if (d <= -1_ly || d >= 1_ly)
132 if (d <= -0.1_au || d >= 0.1_au)
134 if (d <= -1_km || d >= 1_km)
136 if (d <= -1_m || d >= 1_m || d == 0.0_m)
138 if (d <= -1_cm || d >= 1_cm)
140 if (d <= -1_mm || d >= 1_mm)
142 if (d <= -1_um || d >= 1_um)
144 if (d <= -1_nm || d >= 1_nm)
152 if (d <= -1_ly || d >= 1_ly)
154 if (d <= -1_ls || d >= 1_ls)
156 if (d <= -1_mi || d >= 1_mi)
158 if (d <= -1_yd || d >= 1_yd)
160 if (d <= -1_ft || d >= 1_ft)
165 inline std::ostream&
operator<<(std::ostream& os,
const length d)
174 if (
abs(t) > 365.25_days)
176 if (
abs(t) > 10_days)
180 if (t <= -1_h || t >= 1_h)
182 if (t <= -1_min || t >= 1_min)
184 if (t <= -1_s || t >= 1_s || t == 0.0_s)
186 if (t <= -1_ms || t >= 1_ms)
188 if (t <= -1_us || t >= 1_us)
190 if (t <= -1_ns || t >= 1_ns)
195 inline std::ostream&
operator<<(std::ostream& os,
const time t)
204 if (m <= -1_Pt || m >= 1_Pt)
206 if (m <= -1_Tt || m >= 1_Tt)
208 if (m <= -1_Gt || m >= 1_Gt)
210 if (m <= -1_Mt || m >= 1_Mt)
212 if (m <= -1_kt || m >= 1_kt)
214 if (m <= -1_t || m >= 1_t)
216 if (m <= -1_kg || m >= 1_kg || m == 0.0_kg)
218 if (m <= -1_g || m >= 1_g)
220 if (m <= -1_mg || m >= 1_mg)
222 if (m <= -1_ug || m >= 1_ug)
230 if (m <= -1_Msun || m >= 1_Msun)
232 if (m <= -1_Mjup || m >= 1_Mjup)
234 if (m <= -1_Mearth || m >= 1_Mearth)
236 if (m <= -1_Mmoon || m >= 1_Mmoon)
238 if (m <= -1_lb || m >= 1_lb)
243 inline std::ostream&
operator<<(std::ostream& os,
const mass m)
256 if (T >= -150_degC && T <= 150_degC)
258 if (T <= -1_K || T >= 1_K || T == 0.0_K)
260 if (T <= -1_mK || T >= 1_mK)
262 if (T <= -1_uK || T >= 1_uK)
273 inline std::ostream&
operator<<(std::ostream& os,
const temperature T)
282 if (I <= -1_GA || I >= 1_GA)
284 if (I <= -1_MA || I >= 1_MA)
286 if (I <= -1_kA || I >= 1_kA)
288 if (I <= -1_A || I >= 1_A || I == 0.0_A)
290 if (I <= -1_mA || I >= 1_mA)
292 if (I <= -1_uA || I >= 1_uA)
294 if (I <= -1_nA || I >= 1_nA)
304 if (a <= -1_km² || a >= 1_km²)
306 if (a <= -1_hm² || a >= 1_hm²)
308 if (a <= -1_m² || a >= 1_m² || a == 0.0_m²)
310 if (a <= -1_cm² || a >= 1_cm²)
312 if (a <= -1_mm² || a >= 1_mm²)
317 inline std::ostream&
operator<<(std::ostream& os,
const area a)
326 if (a <= -1_per_km² || a >= 1_per_km²)
328 if (a <= -1_per_hm² || a >= 1_per_hm²)
330 if (a <= -1_per_m² || a >= 1_per_m² || a == 0.0_per_m²)
332 if (a <= -1_per_cm² || a >= 1_per_cm²)
334 if (a <= -1_per_mm² || a >= 1_per_mm²)
339 inline std::ostream&
operator<<(std::ostream& os,
const per_area a)
348 if (v <= -1_km³ || v >= 1_km³)
350 if (v <= -1_m³ || v >= 1_m³)
352 if (v <= -1_l || v >= 1_l || v == 0.0_l)
354 if (v <= -1_ml || v >= 1_ml)
356 if (v <= -1_ul || v >= 1_ul)
358 if (v <= -1_nl || v >= 1_nl)
363 inline std::ostream&
operator<<(std::ostream& os,
const volume v)
372 if (v <= -1_km_per_s || v >= 1_km_per_s)
374 if (v <= -1_km_per_h || v >= 1_km_per_h)
376 if (v <= -1_m_per_s || v >= 1_m_per_s || v == 0.0_m_per_s)
384 if (V <= -1_Mach || V >= 1_Mach)
389 inline std::ostream&
operator<<(std::ostream& os,
const velocity v)
398 if (a <= -1_km_per_s² || a >= 1_km_per_s²)
403 inline std::ostream&
operator<<(std::ostream& os,
const acceleration a)
412 if (f <= -1_THz || f >= 1_THz)
414 if (f <= -1_GHz || f >= 1_GHz)
416 if (f <= -1_MHz || f >= 1_MHz)
418 if (f <= -1_kHz || f >= 1_kHz)
420 if (f <= -1_Hz || f >= 1_Hz || f == 0.0_Hz)
425 inline std::ostream&
operator<<(std::ostream& os,
const frequency f)
434 if (F <= -1_ZN || F >= 1_ZN)
436 if (F <= -1_EN || F >= 1_EN)
438 if (F <= -1_PN || F >= 1_PN)
440 if (F <= -1_TN || F >= 1_TN)
442 if (F <= -1_GN || F >= 1_GN)
444 if (F <= -1_MN || F >= 1_MN)
446 if (F <= -1_kN || F >= 1_kN)
448 if (F <= -1_N || F >= 1_N || F == 0.0_N)
450 if (F <= -1_mN || F >= 1_mN)
452 if (F <= -1_uN || F >= 1_uN)
457 inline std::ostream&
operator<<(std::ostream& os,
const force F)
466 if (E <= -1_PJ || E >= 1_PJ)
468 if (E <= -1_TJ || E >= 1_TJ)
470 if (E <= -1_GJ || E >= 1_GJ)
472 if (E <= -1_MJ || E >= 1_MJ)
474 if (E <= -1_kJ || E >= 1_kJ)
476 if (E <= -1_J || E >= 1_J || E == 0.0_J)
481 inline std::ostream&
operator<<(std::ostream& os,
const energy E)
490 if (P <= -1_TW || P >= 1_TW)
492 if (P <= -1_GW || P >= 1_GW)
494 if (P <= -1_MW || P >= 1_MW)
496 if (P <= -1_kW || P >= 1_kW)
501 inline std::ostream&
operator<<(std::ostream& os,
const power P)
510 if (I <= -1_MW_per_m² || I >= 1_MW_per_m²)
512 if (I <= -1_kW_per_m² || I >= 1_kW_per_m²)
514 if (I <= -1_W_per_m² || I >= 1_W_per_m²)
519 inline std::ostream&
operator<<(std::ostream& os,
const power_intensity I)
528 if (p <= -1_MPa || p >= 1_MPa)
530 if (p <= -1_kPa || p >= 1_kPa)
532 if (p <= -1_hPa || p >= 1_hPa)
534 if (p <= -1_Pa || p >= 1_Pa || p == 0.0_Pa)
536 if (p <= -1_mPa || p >= 1_mPa)
541 inline std::ostream&
operator<<(std::ostream& os,
const pressure p)
548 inline std::string
to_string(
const electric_potential U)
550 if (U <= -1_GV || U >= 1_GV)
552 if (U <= -1_MV || U >= 1_MV)
554 if (U <= -1_kV || U >= 1_kV)
556 if (U <= -1_V || U >= 1_V || U == 0.0_V)
558 if (U <= -1_mV || U >= 1_mV)
560 if (U <= -1_uV || U >= 1_uV)
562 if (U <= -1_nV || U >= 1_nV)
567 inline std::ostream&
operator<<(std::ostream& os,
const electric_potential U)
576 if (Q <= -1_GAh || Q >= 1_GAh)
578 if (Q <= -1_MAh || Q >= 1_MAh)
580 if (Q <= -1_kAh || Q >= 1_kAh)
582 if (Q <= -1_Ah || Q >= 1_Ah || Q == 0.0_Ah)
584 if (Q <= -1_mAh || Q >= 1_mAh)
591 if (m <= -1_t_per_m² || m >= 1_t_per_m²)
599 if (m <= -1_kg_per_kW || m >= 1_kg_per_kW)
604 inline std::ostream&
operator<<(std::ostream& os,
const mass_per_power m)
613 if (d <= -1_t_per_m³ || d >= 1_t_per_m³)
632 std::snprintf(buf,
sizeof(buf),
"%u",
byte);
633 return std::string(buf);
639 std::snprintf(buf,
sizeof(buf),
"%c", glyph);
640 return std::string(buf);
657 const auto Hiroshima_bomb = 62_TJ;
658 if (E >= Hiroshima_bomb)
661 const auto one_kg_TNT = 4.184_MJ;
662 mass kgTNT = kilograms(E / one_kg_TNT);
Defines 297 literals, e.g. 24_h.
Definition constants.h:12
std::string to_string(const length d)
Returns the given length as string using SI units.
Definition conversions.h:120
SI_INLINE_CONSTEXPR quantity< Dimension, T > abs(const quantity< Dimension, T > &x)
Definition internal.h:563
auto to_percentage_format
configurable
Definition conversions.h:13
detail::unit< detail::dimension_of_t< Dimension >, detail::ratio< numerator, denumerator > > unit
Definition internal.h:829
std::ostream & operator<<(std::ostream &os, const length d)
Definition conversions.h:165
auto to_string_format
configurable, SI standard formatting by default
Definition conversions.h:11
double dimensionless
to hold a quantity without any unit, e.g. 42
Definition datatypes.h:18
auto to_equivalent_format
configurable, SI standard formatting by default
Definition conversions.h:12
std::string to_equivalent(const length d)
Returns a length equivalent as string, e.g. in Imperial units.
Definition conversions.h:150
bool from_string(const std::string &str, length &result)
The from_string() function.
Definition conversions.h:16
std::string _join(long double quantity, const char *unit, const char *formatString)
Definition conversions.h:110
long double angle
basic datatype to hold a dimensionless angle, e.g. 3.1415
Definition internal.h:14
std::string to_percentage(length part, length total)
Returns the percentage as string, e.g. 50.0%.
Definition conversions.h:667