Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Вывод нулей после после запятой |
Автор: Rino 1.10.2005, 19:06 |
Народ, подскажите плиз, как вывести 0,80 как 0,08, в С/С++, помню что как-то пишеться i чего-то там и цифарки, но не помню как именно, а MSDN не стоит, диски отдал. Заранее спасибо, сорри за глупый вопрос. |
Автор: Mayk 1.10.2005, 20:32 | ||||
Раздели на 10 ![]() Ну а кол-во знаков задавать например так
|
Автор: nikitao 2.10.2005, 01:09 | ||||||
Или(если в С++) через манипулятор:
или так:
|
Автор: Zero 2.10.2005, 11:34 | ||||
Точнее сказать "форматирование чисел с дробной частью":
|
Автор: Rino 2.10.2005, 17:38 |
nikitao Спасибо, только че-то не очень компилиться. Я немного не то написал, просто задание на работу с числами, и в итоге мне надо int 80 вывести на экран как 0.08 используя какой-то там формат вывода, ну "0." я просто печатаю, а вот дальше нужен какой-то формат вывода |
Автор: Dreamer_0x01 2.10.2005, 17:49 |
не понимаю вашего задания. еще раз кратко и в деталях. |
Автор: Rino 2.10.2005, 20:40 |
см прикрепленный файл. В конструкторе я получаю мантиссу(для удобства * на 1000) и exp, потом написаны операции сложения, умножения и вычитания для чисел моего класса. Все нормально работает, вот только с умножением, при определенных значениях(хочу получить 0,08) получается 80, все как надо(если поделить на 1000, то как раз 0,08), только на экран это выводиться cout <<"0." << mant << " * 10^" <<exp << "\n"; как все и должно выводиться 0.80 * 10^0 а мне надо 0.08 * 10^0 препод сказал, что есть какой-то формат вывода, но он не помнит, типо посмотри сам. Надеюсь понятно? кто-нить может помочь? |
Автор: Zero 2.10.2005, 21:45 | ||
Слуш, чувак, я же в предыдущем всвоём посте написал тебе формат вывода чисел с дробной частью Добавлено @ 21:52 Упс... Извиняюсь, с отрицательными числами этот способ не подходит.. ![]() |
Автор: nikitao 2.10.2005, 21:59 | ||
До меня теперь вообще ничего не доходит??????? ![]() Может весь исходный код или часть(которая не работает) выложешь,а то не понятно,что значит
При каких работает ,а при каких нет? |
Автор: Rino 2.10.2005, 23:20 |
может так будет понятно //конструктор 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 3.10.2005, 00:17 | ||||
бред какой-то, ты уж извини... но когда программа написана в таком стиле и с ошибками в алгоритме, тема звучит еще более бредово... мде... я бы вообще заново все это переписал )) а пока - попробуй заменить
на
|
Автор: Rino 3.10.2005, 00:58 | ||
Я не обидчивый и люблю когда меня поправляет, так как хочу научиться писать все нормально, то что программу можно переписать я знаю, сейчас работаю над этим, просто выложил работающий вариант. а насче
нельзя юзать по заданию 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 28.10.2007, 00:03 |
Похожий вопрос: делаю вывод чисел с помощью sprintf. Как удалить лишние незначащие нули в конце массиве байтов: "25.500000" -> "25.5" "25.560000" -> "25.56" Как непосредственно их удалить из массива в принципе понятно. Может можно строку форматирования как-то написать или функцию другую использовать или ещё что-то... чтобы само собой всё получалось |
Автор: JackYF 28.10.2007, 01:19 |
kilonet, из строки удалять нули? Это к форматированию уже отношения не имеет, (s)printf про строки ничего не знает. |
Автор: Ln78 28.10.2007, 05:42 |
kilonet, %g (%lg) отличаются от %f (%lf) как раз тем, что удаляют незначащие нули. |
Автор: Dronchik 28.10.2007, 10:43 |
Rino, для лучшего вида поста с кодом есть такая кнопочка, код называеться. Кней мышку подводишь и выбираешь подсветку какого кода тебе надо |
Автор: JackYF 28.10.2007, 11:53 |
Ln78, |
Автор: Ln78 28.10.2007, 12:14 |
JackYF, Массив уже в итоге ![]() archimed7592, ты думаешь для топик-стартера тема всё ещё актуальна? ![]() |
Автор: archimed7592 28.10.2007, 17:28 | ||
Я как-то внимания на даты не обратил ![]() Некрофилы, блин... |