Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
98 / 97 / 11
Регистрация: 12.09.2016
Сообщений: 194
1

Убрать незначащие нули из double

01.05.2019, 23:38. Показов 10432. Ответов 14
Метки нет (Все метки)

Добрый день, как убрать незначащие нули из переменной типа double? Проблема в том, что результатом данной программы
C++
1
2
3
double a=3.14;
string s=std::to_string(a);
cout<<s<<endl;
Будет 3.14000000
Так вот, мне нужно от этих нулей избавиться
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2019, 23:38
Ответы с готовыми решениями:

Убрать незначащие нули из строки
Добрый день. Есть строка,формата (x-3)(x-4)(x+3.0000)(x+3.250) (Количество скобок может...

Убрать из строкового выражения незначащие нули
Добрый день.Нужно написать функцию,которая на вход получает строку формата (x-1,000000/7) (скобок...

Как убрать незначащие нули из вещественного числа?
Помогите пожалуйста! Есть число double value == 12 650 320. 250 000 Как убрать 0 после...

Удалить из каждой группы подряд идущих цифр все начальные незначащие нули
Всем доброго дня) я хз как делать эту задачу..помогите плиз..На Borland C for dos.

14
Продавец времени
5777 / 3186 / 731
Регистрация: 12.03.2015
Сообщений: 15,095
01.05.2019, 23:45 2
Цитата Сообщение от Gaveyn Посмотреть сообщение
Так вот, мне нужно от этих нулей избавиться
C++
1
2
3
4
double a=3.14;
// string s=std::to_string(a);
// cout<<s<<endl;
printf("%g\n", a);
0
812 / 500 / 210
Регистрация: 19.01.2019
Сообщений: 1,196
02.05.2019, 00:01 3
Verevkin, это C. В крестах будет что-то такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
 
 
 
int main()
{
    std::stringstream ss;
    double a = 3.14;
    ss << std::fixed << std::setprecision(2) << a;
    std::string s = ss.str();
    std::cout << s << '\n';
 
 
    system("pause");
    return 0;
}
0
Продавец времени
5777 / 3186 / 731
Регистрация: 12.03.2015
Сообщений: 15,095
02.05.2019, 00:05 4
Цитата Сообщение от nalbe666 Посмотреть сообщение
это C. В крестах будет что-то такое:
В С++ мой вариант работать будет также.
0
812 / 500 / 210
Регистрация: 19.01.2019
Сообщений: 1,196
02.05.2019, 00:16 5
Verevkin, я в курсе. Перемешивать два языка считается плохим тоном. К тому же ТС не просто вывел дабл, а хотел сконвертить его в стринг.
0
Продавец времени
5777 / 3186 / 731
Регистрация: 12.03.2015
Сообщений: 15,095
02.05.2019, 00:25 6
Цитата Сообщение от nalbe666 Посмотреть сообщение
Перемешивать два языка считается плохим тоном.
Чо за бред? Я ж не мешаю С++ и Паскаль. Си - это подмножество С++, и я первый раз слышу, что, это называется "смешивать".
Цитата Сообщение от nalbe666 Посмотреть сообщение
К тому же ТС не просто вывел дабл, а хотел сконвертить его в стринг.
Ну ОК. Подождём, чо скажет ТС. Я так понял, что ему надо вывести значение переменной в консоль, отбросив нули справа. И всё.

Убрать незначащие нули из double
1
6454 / 4389 / 2515
Регистрация: 18.12.2017
Сообщений: 13,713
02.05.2019, 00:50 7
Лучший ответ Сообщение было отмечено Gaveyn как решение

Решение

nalbe666, если например a=3.147

Gaveyn, нули можно убрать из переменной string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
using namespace std; 
 
int main()
{
    double a;
    cout << "a="; cin >> a;
    string s=to_string(a);
    
    if (s[s.size()-1]=='0')
    for (size_t i=s.size()-1; s[i]=='0'; i--)    
    s.erase(i,1); 
    
    if (s[s.size()-1]=='.')
    s.erase(s.size()-1,1);
    
    cout << "s=" << s << "\n"; 
 
system("pause");
return 0;
}
Gaveyn, расскажите зачем это Вам
0
98 / 97 / 11
Регистрация: 12.09.2016
Сообщений: 194
02.05.2019, 09:54  [ТС] 8
Verevkin, Мне нужно было избавиться от нулей в самой строке,а не просто не показывать их, но за предложение спасибо

nalbe666, Ваш вариант, как я понял, округляет число до двух знаков,а это не то что мне нужно. Но все равно спасибо

Yetty, а вот ваш вариант именно то, что я искал!Только в 15 строке точку на запятую нужно поменять)Спасибо большое!
0
6454 / 4389 / 2515
Регистрация: 18.12.2017
Сообщений: 13,713
02.05.2019, 11:36 9
Цитата Сообщение от Gaveyn Посмотреть сообщение
Только в 15 строке точку на запятую нужно поменять
зачем ? число double вводится через точку
0
Продавец времени
5777 / 3186 / 731
Регистрация: 12.03.2015
Сообщений: 15,095
02.05.2019, 13:17 10
Цитата Сообщение от Gaveyn Посмотреть сообщение
Verevkin, Мне нужно было избавиться от нулей в самой строке,а не просто не показывать их, но за предложение спасибо
Ну и чего тебя не устроило?
0
98 / 97 / 11
Регистрация: 12.09.2016
Сообщений: 194
02.05.2019, 21:01  [ТС] 11
Yetty, а в строку преобразовывается с запятой ( по крайней мере так to_string делает)
Verevkin, то, что в строке останутся эти нули,и если к этой строке прибавлять какой-то текст, то данный метод уже работать не будет
0
6454 / 4389 / 2515
Регистрация: 18.12.2017
Сообщений: 13,713
02.05.2019, 21:35 12
Цитата Сообщение от Gaveyn Посмотреть сообщение
в строку [число типа double] преобразовывается с запятой ( по крайней мере так to_string делает)
подскажите, на каком компиляторе такое наблюдается ?
0
2417 / 1817 / 400
Регистрация: 15.12.2013
Сообщений: 7,892
02.05.2019, 21:37 13
Yetty, это от локали зависит. В некоторых языках разделитель - точка, в некоторых - запятая.
1
Продавец времени
5777 / 3186 / 731
Регистрация: 12.03.2015
Сообщений: 15,095
02.05.2019, 22:24 14
Цитата Сообщение от Gaveyn Посмотреть сообщение
то, что в строке останутся эти нули
Не останутся. Но, тем не менее, хрен с ним.
0
2417 / 1817 / 400
Регистрация: 15.12.2013
Сообщений: 7,892
02.05.2019, 22:45 15
Цитата Сообщение от Gaveyn Посмотреть сообщение
Мне нужно было избавиться от нулей в самой строке,а не просто не показывать их, но за предложение спасибо
Не то чтобы я поддерживал C-решения в C++, но существует также функция
sprintf
для сохранения форматированного вывода в буфер.

Цитата Сообщение от Gaveyn Посмотреть сообщение
Ваш вариант, как я понял, округляет число до двух знаков,а это не то что мне нужно. Но все равно спасибо
тот вариант как раз то, что вам нужно.
2 там исключительно для иллюстрации возможностей форматированного вывода в C++, уберите эти манипуляции и используйте вот так:
C++
1
ss << a;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2019, 22:45

Проверить правильность написания чисел в тексте; встретившиеся в начале числа незначащие нули опустить
Привет, возникла такая проблема Цитирую задание : &quot;Проверить правильность написания чисел в...

Удалить незначащие нули
в строке из чисел удалить незначащие нули т.е дана строка 005 000035 0005000 05 нужно получить 5...

Удалить незначащие нули числа
В общем есть label, в нем двоичное число. Нужно вывести в текстбокс это число без &quot;незначащих&quot;...

В двоичной системе счисления не выводить незначащие нули
Здравствуйте помогите пожалуйста, сделать так в программе чтобы в двоичной системе счисления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.