C/C++

Преобразовать заданное вещественное число в строку символов с указанием количества разрядов после разделителя целой c++

преобразовать заданное вещественное число в строку символов с указанием количества разрядов после разделителя целой и дробной части
Sadir Tilvaldiev
Sadir Tilvaldiev
76
Если требуется вывести больше количество знаков после разделителя (запятой или точки) целой и дробной части, то возможны неточности из-за проблемы дробных числе в Си и C++. Они неправильно переводятся в десятичную систему.

 #include  
#include
#include

using namespace std;

int tens(int n, int t)
{
if(t == 0)
return 1;
else if(t < 0)
exit(1);
while(t > 1)
{
n *= 10;
t--;
}
return n;
}

string double_to_string(double number, const unsigned count)
{
string s = ""s;
int x,y;
double num = number;
int tmp;
bool minus = false;

if(num < 0.0)
{
// s.insert (s.begin(), '-');
minus = true;
num *= -1.0;
}

if(num < 1.0)
s.insert (s.begin(), '0');

y = 0;
while(num >= 1.0)
{
tmp = num;
x = (tmp / tens(10, y)) % 10;
s.insert (s.begin(), x + '0');
num -= x * tens(10,y);
y++;
}

y = 0;

if(count)
s.insert(s.end(), '.');

while(y < count)
{
num *= 10.0;
tmp = num;
x = tmp % 10;
s.insert(s.end(), x + '0');
num -= x;
y++;
}

if(minus)
s.insert (s.begin(), '-');

return s;
}

int main()
{
double n;
string str;
unsigned c;

cout > n;

cout > c;

str = double_to_string(n,c);

cout
Ismoil Sadikov
Ismoil Sadikov
9 833
Лучший ответ
out = std::format(":.5f",3.1415926); //C++20
Sadir Tilvaldiev Можешь код написать я не понимаю
Никита Майер int main() {
double num = 123.45678;
int precision = 2; // количество разрядов после разделителя
std::string str_num = std::to_string(num);
size_t pos = str_num.find('.');
if (pos != std::string::npos) {
str_num = str_num.substr(0, pos + precision + 1);
}
std::cout << str_num << std::endl;
return 0;
}


Здесь переменная num содержит вещественное число, а переменная precision задает количество разрядов после разделителя. Функция std::to_string() используется для преобразования числа в строку символов. Затем производится поиск позиции разделителя в строке и обрезка строки до нужного числа знаков после разделителя.
©oleg

Похожие вопросы