MCPcopy Create free account
hub / github.com/DFHack/dfhack / string format_number_by_sig_fig

Method string format_number_by_sig_fig

library/MiscUtils.cpp:135–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

133}
134
135DFHACK_EXPORT std::string format_number_by_sig_fig(double num, size_t sig_figs) {
136 if (num == 0)
137 return "0";
138
139 double absnum = std::abs(num);
140 int magnitude = get_magnitude(absnum);
141 auto & sig_data = sig_fig_db[magnitude];
142
143 int sf = (int)sig_figs;
144 if (sf < 1) sf = 1;
145 int precision = magnitude <= 4 ? std::max(0, sf - magnitude) : std::max(0, sf - (magnitude % 3)) % 3;
146 double divisor = sig_data.second;
147 double roundoff = divisor <= 1.0 ? 0 : 1.0 / (2.0 * std::pow(10, precision));
148
149 std::ostringstream ss;
150 ss << std::fixed << std::setprecision(precision) << std::copysign(absnum / divisor - roundoff, num) << sig_data.first;
151 return ss.str();
152}
153
154DFHACK_EXPORT std::string format_number_by_sig_fig(int64_t num, size_t sig_figs) {
155 if (std::abs(num) < 10000) {

Callers

nothing calls this directly

Calls 2

get_magnitudeFunction · 0.85
strMethod · 0.45

Tested by

no test coverage detected