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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Long double to char [C], не могу найти ошибку в функции 
:(
    Опции темы
PELIKANN
Дата 30.11.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть функция, которая переводит из long double  в строку....

ошибка в том что иногда при вводе в нее числа выдает в строку число меньшее на единицу....помогите пожалуйста...

Код

       //--------------------------------
#include <conio.h>
#include <stdio.h>
#include<stdlib.h>
#include <string.h>

#define max 100

//--------------------------------

void main()
{
long double k=1;
long double sm;
char s[max]="";
int i=0;
scanf("%Lf",&sm);
while (sm>=1.0)
{
    k=k*10;
    sm=sm/10;
}
while (k>1.0)
    {
    sm=sm*10;
    s[i]=(int) sm + '0';
    sm=sm-(int) sm;
    k=k/10;
    i++;
    }
s[i]='\0';
printf("s=%s\n",s);
getch();
}

PM MAIL   Вверх
sir_nuf_nuf
Дата 1.12.2008, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



PELIKANN, да вы правы! есть такая функция !
printf называется
Код

char str[100];
long double a = 31.4e-1;
snprintf(str, 100, "%lle\n", a);


а по поводу вашей собственной функции: На каком числе ошибается ?



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
ksili
Дата 1.12.2008, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



В double числа не всегда могут быть представлены точно. Поэтому вы иногда думаете, что там 5, а там на самом деле 4.999999999999. Вот в таком случае (int)4.999999999999 даст 4, а не 5, как вам хотелось бы.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
PELIKANN
Дата 1.12.2008, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в основном это число 7 и 8....
то есть (int) 8=7 у меня
PM MAIL   Вверх
ksili
Дата 1.12.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну вот посмотри в отладчике переменную sm перед приведением типа. И поставь повышенную точность отображения. Я однажды долго искал такую же ошибку, т.к. в Watch переменные почему-то немножечко округлялись.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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