XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Light or Dark

offline
Опыт: 7,275
Активность:
Вопрос С++
Есть переменная типа float. Если её выводить через printf("%f", x); , то она будет выводиться со стопкой нулей, в стиле 100.0000000000. Хочу узнать, как выводить в си float в виде 100, 100.00 и тд? Т.е. как регулировать число знаков после запятой в выводе?
Старый 29.10.2011, 19:25
Hanabishi
COOL STATUS
offline
Опыт: отключен
Light_or_Dark, как вариант, конвертить в строку и её уже обрубать.
Старый 29.10.2011, 19:32
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Hanabishi, не нужно лишний раз переменные объявлять, они занимают много места. Тем более, бывают программы, когда каждый байт на счету.
Вообще, должен быть простой способ. В паскале, например, write(peremennaya:1:0) - 0 знаков после запятой. Попробуй в c++ так же сделать.
Старый 29.10.2011, 19:34
Light or Dark

offline
Опыт: 7,275
Активность:
Не работает, как в паскале, пробовал уже =(
Старый 29.10.2011, 19:35
Wolfeg
oldfag
offline
Опыт: 23,207
Активность:
как то так
Код:
cout << char(x)

это если iostream использовать.

Wolf добавил:
а printf возможно будет ("%c", x) если я правильно помню старый синтаксис :D

Wolf добавил:
хотя ща в vs2010 проверил, через %c не выводит ваще нифига. ща проверю функцию char

Wolf добавил:
хотя даже переводя флоат в чар он выводит значок а не цифры. над подумать
Старый 29.10.2011, 22:28
Ajaccio

offline
Опыт: 1,007
Активность:
printf("%0.Xf", Y);
Где X - число знаков, ну и Y - само число.
Используется округление по правилам математики, если X меньше числа знаков после запятой.
Число 0 в записи "0.Xf" тоже что-то вроде означает...
Для cout:
#include <iomanip.h>

cout << setprecision(X) << Y;
Старый 29.10.2011, 22:52
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
Цитата:
Сообщение от Ajaccio
Число 0 в записи "0.Xf" тоже что-то вроде означает...

Может быть ширину?
Старый 29.10.2011, 23:10
Wolfeg
oldfag
offline
Опыт: 23,207
Активность:
это насильное ограничение а не убирание нулей. сколько гуглил ниче не нашел. единственный вариант это юзать #include <iostream> и использовать функцию cout для вывода, она сама обрезает нули

Wolf добавил:
Код:
#include <iostream>
using namespace std;

int main(void)
{
float number = -12.3222;
cout << number;
system("pause");
return 0;
}


Wolf добавил:
нашел ещё такое решение но по моему это извращение
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define SIZE 100
 
char* rtrim(char*, char);
 
int main()
{
    char buf[SIZE];
 
    double value = 12640320.250000;
 
    snprintf(buf, SIZE, "%f", value);
 
    puts(rtrim(buf, '0'));
    
    exit(0);
}
 
char* rtrim(char* buf, char c)
{
    /* Null buf will cause segmentation fault */
 
    char* pbuf = buf + strlen(buf) - 1;
 
    while(pbuf >= buf && *pbuf == c)
        --pbuf;
 
    pbuf[1] = '\0';
 
    return buf;
}
Старый 29.10.2011, 23:21
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Light_or_Dark, ты уж определись что тебе надо.
printf это си, а не с++.
Если ты хочешь писать именно в си, то почитай как устроен printf: www.codenet.ru/progr/cpp/spru/printf.php
Это первая ссылка в гугле.
Если ты хочешь писать на c++, то используй метод для std:cout, который предложил Ajaccio.
Wolf, я уверен почти на 100%, что ему важны не сами нули, а количество знаков после запятой.
Старый 29.10.2011, 23:44
Wolfeg
oldfag
offline
Опыт: 23,207
Активность:
printf можно и c+ юзать но это уже устаревший метод
так что iostream и cout cin тебе в руки
Старый 30.10.2011, 10:49
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Wolf, это не устаревший метод :facepalm: это "метод" языка си.
То, что язык с++ обратно совместим с языком си не делает методы языка си устаревшими.
Старый 30.10.2011, 22:46
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Hellfim, это C++ ведь, можно asm использовать например, это ассемблер интегрированный. C++ в основном просто расширенный C. Тогда по-твоему и {} и циклы и #include - все это C, а не C++
Старый 31.10.2011, 18:44
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:50.