![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Rino |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.8.2005 Репутация: нет Всего: нет |
Народ, подскажите плиз, как вывести 0,80 как 0,08, в С/С++, помню что как-то пишеться i чего-то там и цифарки, но не помню как именно, а MSDN не стоит, диски отдал.
Заранее спасибо, сорри за глупый вопрос. |
|||
|
||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Раздели на 10 ![]() Ну а кол-во знаков задавать например так
-------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
nikitao |
|
||||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Или(если в С++) через манипулятор:
или так:
-------------------- Жизнь - печальная штука. |
||||||
|
|||||||
Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Точнее сказать "форматирование чисел с дробной частью":
|
||||
|
|||||
Rino |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.8.2005 Репутация: нет Всего: нет |
nikitao
Спасибо, только че-то не очень компилиться. Я немного не то написал, просто задание на работу с числами, и в итоге мне надо int 80 вывести на экран как 0.08 используя какой-то там формат вывода, ну "0." я просто печатаю, а вот дальше нужен какой-то формат вывода |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
не понимаю вашего задания. еще раз кратко и в деталях.
-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Rino |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 ) ![]() |
|||
|
||||
Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Слуш, чувак, я же в предыдущем всвоём посте написал тебе формат вывода чисел с дробной частью Добавлено @ 21:52 Упс... Извиняюсь, с отрицательными числами этот способ не подходит.. ![]() |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
До меня теперь вообще ничего не доходит???????
![]() Может весь исходный код или часть(которая не работает) выложешь,а то не понятно,что значит
При каких работает ,а при каких нет? -------------------- Жизнь - печальная штука. |
|||
|
||||
Rino |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 как я уже писал препод сказал, типо есть какой-то формат вывода, |
|||
|
||||
BreakPointMAN |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
бред какой-то, ты уж извини... но когда программа написана в таком стиле и с ошибками в алгоритме, тема звучит еще более бредово... мде... я бы вообще заново все это переписал ))
а пока - попробуй заменить
на
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
||||
|
|||||
Rino |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.8.2005 Репутация: нет Всего: нет |
Я не обидчивый и люблю когда меня поправляет, так как хочу научиться писать все нормально, то что программу можно переписать я знаю, сейчас работаю над этим, просто выложил работающий вариант.
а насче
нельзя юзать по заданию 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 напиши плиз, что вообще можно подправить буду благодарен |
|||
|
||||
kilonet |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 13.3.2006 Репутация: нет Всего: нет |
Похожий вопрос:
делаю вывод чисел с помощью sprintf. Как удалить лишние незначащие нули в конце массиве байтов: "25.500000" -> "25.5" "25.560000" -> "25.56" Как непосредственно их удалить из массива в принципе понятно. Может можно строку форматирования как-то написать или функцию другую использовать или ещё что-то... чтобы само собой всё получалось |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
kilonet, из строки удалять нули? Это к форматированию уже отношения не имеет, (s)printf про строки ничего не знает.
|
|||
|
||||
Ln78 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
kilonet, %g (%lg) отличаются от %f (%lf) как раз тем, что удаляют незначащие нули.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |