Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод нулей после после запятой, надо число 0,80 вывести как 0,8 
:(
    Опции темы
Rino
Дата 1.10.2005, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Народ, подскажите плиз, как вывести 0,80 как 0,08, в С/С++, помню что как-то пишеться i чего-то там и цифарки, но не помню как именно, а MSDN не стоит, диски отдал.
Заранее спасибо, сорри за глупый вопрос.
PM MAIL   Вверх
Mayk
Дата 1.10.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Rino @ 1.10.2005, 23:06)
Народ, подскажите плиз, как вывести 0,80 как 0,08,

Раздели на 10 smile

Ну а кол-во знаков задавать например так
Код

printf("%.2f",0.08);




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
nikitao
Дата 2.10.2005, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



Цитата
Ну а кол-во знаков задавать например так

Или(если в С++) через манипулятор:
Код

#include<iomanip.h>
//бла бла бла
cout<<setprecision(i)<<d; //i-точность которая тебенужна d-твое число

или так:
Код

cout.precision(i);



--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Zero
Дата 2.10.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Rino @ 1.10.2005, 19:06)
как вывести 0,80 как 0,08, в С/С++

Точнее сказать "форматирование чисел с дробной частью":
Код

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(<количество знаков после десятичной точки>);

PM MAIL ICQ   Вверх
Rino
Дата 2.10.2005, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



nikitao
Спасибо, только че-то не очень компилиться. Я немного не то написал, просто задание на работу с числами, и в итоге мне надо int 80 вывести на экран как 0.08 используя какой-то там формат вывода, ну "0." я просто печатаю, а вот дальше нужен какой-то формат вывода
PM MAIL   Вверх
Dreamer_0x01
Дата 2.10.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



не понимаю вашего задания. еще раз кратко и в деталях.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Rino
Дата 2.10.2005, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



см прикрепленный файл. В конструкторе я получаю мантиссу(для удобства * на 1000) и exp, потом написаны операции сложения, умножения и вычитания для чисел моего класса. Все нормально работает, вот только с умножением, при определенных значениях(хочу получить 0,08) получается 80, все как надо(если поделить на 1000, то как раз 0,08), только на экран это выводиться
cout <<"0." << mant << " * 10^" <<exp << "\n";
как все и должно выводиться
0.80 * 10^0
а мне надо 0.08 * 10^0
препод сказал, что есть какой-то формат вывода, но он не помнит, типо посмотри сам.
Надеюсь понятно? кто-нить может помочь?

Это сообщение отредактировал(а) Rino - 2.10.2005, 20:43

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  123.GIF 2,89 Kb
PM MAIL   Вверх
Zero
Дата 2.10.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Rino @ 2.10.2005, 20:40)
препод сказал, что есть какой-то формат вывода, но он не помнит, типо посмотри сам.
Надеюсь понятно? кто-нить может помочь?

Слуш, чувак, я же в предыдущем всвоём посте написал тебе формат вывода чисел с дробной частью
Добавлено @ 21:52
Упс... Извиняюсь, с отрицательными числами этот способ не подходит.. smile
PM MAIL ICQ   Вверх
nikitao
Дата 2.10.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



До меня теперь вообще ничего не доходит??????? smile
Может весь исходный код или часть(которая не работает) выложешь,а то не понятно,что значит
Цитата
Все нормально работает, вот только с умножением, при определенных значениях

При каких работает ,а при каких нет?


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Rino
Дата 2.10.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



может так будет понятно

//конструктор

myclass::myclass(double x)
{
bool znak;
int count = 0;

exp = 0;

if (x < 0)
{
x = -x;
znak = true;
}

if (x < 10e-8)
x = 0;
else
{
while (x<=0.1)
{
x *= 2;
count++;

exp = -count;
}

}
while (x>1)
{
x /=2;
count++;

exp = count;
}


x *= 1000;
mant = x;
if (znak == true)
mant = -mant;


}

////****************************************
//оператор умножения

myclass operator*(myclass x, myclass y)
{
myclass rez(0);

rez.mant = y.mant * x.mant/1000;
rez.exp = y.exp + x.exp;

return rez;
}

//вывод

void myclass ::print()

{
if (mant < 0)
cout <<"-0." << -mant << " * 10^" <<exp << "\n";

else
cout <<" 0." << mant << " * 10^" <<exp << "\n";

}


//tets programme

#include "myclass.h"
#include <iostream>
using namespace std;

void main(void)
{
myclass a1(4), a2(0.02), rez(0);


a1.print();
a2.print();
rez = a1*a2;
cout <<"a1 * a2 = ";
rez.print();
getchar();
}

//my class

class myclass
{
int mant;
int exp;
public:

myclass(double x);
void print();
myclass(int x, int y);


//friend myclass operator+(myclass, myclass);
//friend myclass operator-(myclass, myclass);
friend myclass operator*(myclass, myclass);


};

вот, при все таком стечении обстоятельств выводиться 0,80*10^0
а мне надо 0,080 * 10^0
как я уже писал препод сказал, типо есть какой-то формат вывода,
PM MAIL   Вверх
BreakPointMAN
Дата 3.10.2005, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



бред какой-то, ты уж извини... но когда программа написана в таком стиле и с ошибками в алгоритме, тема звучит еще более бредово... мде... я бы вообще заново все это переписал ))

а пока - попробуй заменить
Код

myclass operator*(myclass x, myclass y)
   {
    myclass rez(0);
    rez.mant = y.mant * x.mant/1000;
    rez.exp = y.exp + x.exp;
    return rez;
}

на
Код

myclass operator*(myclass x, myclass y)
   {
    myclass rez((y.mant*pow(10,y.exp))/1000 * ((x.mant*pow(10, x.exp))/1000));
    return rez;
   }



--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Rino
Дата 3.10.2005, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 29.8.2005

Репутация: нет
Всего: нет



Я не обидчивый и люблю когда меня поправляет, так как хочу научиться писать все нормально, то что программу можно переписать я знаю, сейчас работаю над этим, просто выложил работающий вариант.
а насче
Цитата


myclass operator*(myclass x, myclass y)
  {
    myclass rez((y.mant*pow(10,y.exp))/1000 * ((x.mant*pow(10, x.exp))/1000));
    return rez;
  }


нельзя юзать по заданию pow и вообще использовать плавающую арифметику.
это умножение не будет корректно работать с моими числами.
а с выводом я кажеться разобрался, вроде так все пашет корекктно

if (mant<0) {mant=-mant;
printf("-%.3f=(-0.%d*2^%d)\n",mant*pow(2,exp)/1000,mant,exp);}
else
printf("%.3f=(0.%d*2^%d)\n",mant*pow(2,exp)/1000,mant,exp);
BreakPointMAN напиши плиз, что вообще можно подправить буду благодарен
PM MAIL   Вверх
kilonet
Дата 28.10.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 13.3.2006

Репутация: нет
Всего: нет



Похожий вопрос:
делаю вывод чисел с помощью sprintf.
Как удалить лишние незначащие нули в конце массиве байтов:
"25.500000" -> "25.5"
"25.560000" -> "25.56"
Как непосредственно их удалить из массива в принципе понятно. Может можно строку форматирования как-то написать или функцию другую использовать или ещё что-то... чтобы само собой всё получалось
PM MAIL ICQ   Вверх
JackYF
Дата 28.10.2007, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



kilonet, из строки удалять нули? Это к форматированию уже отношения не имеет, (s)printf про строки ничего не знает.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Ln78
Дата 28.10.2007, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



kilonet, %g (%lg) отличаются от %f (%lf) как раз тем, что удаляют незначащие нули.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1020 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.