Мне нужно отформатировать значения с двумя значащими цифрами, но никогда не использовать обозначение «e».
Ожидаемый результат:
9.3
6.6
4.6
3.2
2.3
1.6
1.1
760
520
340
200
96
0
123456 следует печатать как 120000. 0,123456 следует печатать как 0,12.
Для контекста используются префиксы SI для каждого коэффициента 10^3. Пробовал
std::format("{:.2g}", value);
Но он сам решает, когда перейти на нотацию «е»:
9.3
6.6
4.6
3.2
2.3
1.6
1.1
7.6e+02
5.2e+02
3.4e+02
2e+02
96
0
Примечание. Я специально прошу метод, не использующий строковый поток.
Примечание: использование спецификатора формата f неверно. Он выдает 2 цифры после десятичной точки, что неверно:
9.35
6.56
4.60
3.22
2.26
1.58
1.10
760.33
517.10
339.48
204.91
96.35
0.00
Вот минимальный воспроизводимый пример (с набором значений)
#include
#include
#include
static constexpr std::array vals{
9349.3867f,
6558.6953f,
4600.0f,
3224.8362f,
2258.7588f,
1579.2142f,
1099.9999f,
760.32617f,
517.10278f,
339.47632f,
204.91417f,
96.3461f,
0.0f,
-96.346039f,
-204.91402f,
-339.47632f,
-517.10266f,
-760.32574f,
-1099.9999f,
-1579.2134f,
-2258.7578f,
-3224.8362f,
-4599.9985f,
-6558.6938f,
-9349.3867f
};
int main()
{
for(size_t k = 0; k != std::size(vals); ++k)
{
// None of these produce the expected result
puts(std::format("{:.2g}\n", vals[k]).c_str());
puts(std::format("{:.1e}\n", vals[k]).c_str());
puts(std::format("{:.2f}\n", vals[k]).c_str());
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ch-to-e-no
Std::format указывает количество значащих цифр, но никогда не переключается на нотацию «e». ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Std::format указывает количество значащих цифр, но никогда не переключается на нотацию «e».
Anonymous » » в форуме C++ - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Std::format указывает количество значащих цифр, но никогда не переключается на нотацию «e».
Anonymous » » в форуме C++ - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Std::format указывает количество значащих цифр, но никогда не переключается на нотацию «e».
Anonymous » » в форуме C++ - 0 Ответы
- 35 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Std::format указывает количество значащих цифр, но никогда не переключается на нотацию «e».
Anonymous » » в форуме C++ - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-