Удаление завершающих нулей - С++

Этот код:

cout<< to_string(x) + "m ----> " + to_string(x *0.001)+ "km"<<endl;

с этим выводом: 0.002000

Однако я хочу удалить лишние нули в конце, но это должно быть в строке кода, так как у меня много строк, подобных приведенной выше.


person 3.00AMCoder    schedule 25.05.2020    source источник
comment
Любые полезные комментарии ~ Большое спасибо!   -  person 3.00AMCoder    schedule 25.05.2020


Ответы (2)


попробуйте этот фрагмент:

cout << "test zeros" << endl;
double x = 200;

cout << "before" << endl;
cout<< std::to_string(x) + "m ----> " + std::to_string(x *0.001)+ "km"<<endl;    


std::string str = std::to_string(x * 0.001);
str.erase ( str.find_last_not_of('0') + 1, std::string::npos );

cout << "after" << endl;
cout<< std::to_string(x) + "m ----> " + str + "km"<<endl;

с выходом:

test zeros
before
200.000000m ----> 0.200000km
after
200.000000m ----> 0.2km

это лучше, чем std::setprecision, потому что вам не нужно решать, сколько num после периода вы хотите сохранить, но пусть реализация найдет это для вас.

Здесь документация для дополнительной информации.

person dboy    schedule 25.05.2020

Попробуйте использовать std::setprecsion()

Установить десятичную точность

Задает десятичную точность, которая будет использоваться для форматирования значений с плавающей запятой в операциях вывода.

Итак, в вашем случае вы можете использовать:

std::cout << std::setprecision(3) 

Это удалит конечные нули с 0,0020000 до 0,002.

Изменить

Код ниже работает, когда вы хотите использовать to_string в своем коде:

#include <iostream>
using namespace std;
int main(){
      int x=1;
      string str2 = to_string(x *0.001);
      str2.erase ( str2.find_last_not_of('0') + 1, std::string::npos );;
      std::cout<<to_string(x)+ "m ----> " + str2+  "km";
}
person Abhishek Bhagate    schedule 25.05.2020
comment
Это не связано с проблемой. Нули идут от to_string, а не std::cout. - person BessieTheCookie; 25.05.2020
comment
cout‹‹to_string(x) + m ----› + to_string(x *0.001)+ km‹‹endl; Как это реализовать в этом коде? пробовал 2 способа, не помогло. - person 3.00AMCoder; 25.05.2020
comment
@ 3.00AMCoder Похоже, вам вообще не нужно использовать to_string в коде. Как объясняется в повторяющемся вопросе, вы не можете запретить to_string добавлять конечные нули. Если вы делаете cout << x << "m ----> " << x * 0.001 << "km" << endl, вы можете управлять форматированием с помощью таких вещей, как setprecision. - person BessieTheCookie; 25.05.2020
comment
@BessieTheCow yepppp спасибо, отлично работает! - person 3.00AMCoder; 25.05.2020
comment
Что ж, чтобы отредактировать мой ответ, приведенный ниже код работает: #include ‹iostream› с использованием пространства имен std; интервал основной () { интервал х = 1; std::string str1 = std::to_string (x); строка str2 = to_string(x *0.001); str1.erase (str1.find_last_not_of('0') + 1, std::string::npos); str2.erase (str2.find_last_not_of('0') + 1, std::string::npos); std::cout‹‹str1 + m ----› + str2+ km; } - person Abhishek Bhagate; 25.05.2020
comment
@ 3.00AMCoder: учтите, решение работает только в том случае, если вы хотите сохранить три цифры после точки. Если ваш другой номер не выглядит так, он больше не будет работать. - person dboy; 25.05.2020