Форум программистов, компьютерный форум CyberForum.ru

Отбросить нули - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
20.03.2013, 09:51     Отбросить нули #1
Ребят помогите отбросить нули. Например я ввожу 0000000000000005,45 а он должен принимать 5,45. И еще вопрос как сделать чтобы он не округлял значение? Потому что если я ввожу больше 16 символов то он последние округляет а мне нужно чтобы просто брал первые 16. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <stdio.h>
 
int main()
 
{
setlocale(0,"rus");
 
double A, Z, U; 
char a[256];
char *c=0;
 
while(true)
    {
    printf("Введите значение числа A(Не более 16 символов)\n");
    scanf("%s", a);
    if(getchar()==' ') 
        {
        fflush (stdin);
        continue;
        }
fflush (stdin);
A=strtod(a,&c);
{
            printf("\nA=%.2f \n",A);
            if(!isdigit(c[0]) && c[0]!=0)
                {
                printf("\nОшибка в следующем:%s\n", c);
                printf("\nПопробуй еще раз\n\n");
                continue;
                }
break;
            }
    }
 
while(true)
    {
    printf("Введите значение числа Z(Не более 16 символов)\n");
    scanf("%s", a);
    if(getchar()==' ') 
        {
        fflush (stdin);
        continue;
        }
fflush (stdin);
Z=strtod(a,&c);
{
            printf("\nZ=%.2f \n",Z);
            if(!isdigit(c[0]) && c[0]!=0)
                {
                printf("\nОшибка в следующем:%s\n", c);
                printf("\nПопробуй еще раз\n\n");
                continue;
                }
break;
            }
    }
 
printf("U=%g\n", U=(A*Z*Z)+(((A/2)*(Z*Z))/13.61)-(A*Z));
 
return 0;
}
Добавлено через 7 минут
Я пробовал сделать вот так scanf("%16s", a); Но если ввести 000000000000000000000000000000000000000000005,45 то напишет что А=0 а надо чтоб отрбросил нули и взял 5,45 или же просто не округлял значение
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 09:51     Отбросить нули
Посмотрите здесь:

Дано натуральное число n. Отбросить в нем все цифры, стоящие правее самой правой единицы либо оставить число без изменений, если единицы в нем нет C++
C++ Дано число. Отбросить в нем все цифры, стоящие левее самой правой единицы.
C++ Перед каждой буквой третьего слова поставить '/'. Лишние символы (с 81-ого) отбросить
Нужно отбросить нули C++
C++ Как отбросить пробелы после числа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
21.03.2013, 07:53  [ТС]     Отбросить нули #21
Цитата Сообщение от ValeryS Посмотреть сообщение
в бухгалтерских программах doudle не используется (из-за погрешностей)
а используется типа такого
C++
1
2
3
4
5
struct MyDouble
{
int integer;// целая часть
int fractional;// дробная часть
}
Теперь понял. А можно сделать чтобы если я ввожу более 16 символов то он мне выдает сообщение что будет использовано вычисление с погрешностями, если не хотите погрешностей то нажмите на кнопку(Y) и введите заново, а если вас устраивают погрешности то для продолжения нажмите(U). Можно так сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
21.03.2013, 08:08     Отбросить нули #22
Цитата Сообщение от MishkaSh Посмотреть сообщение
Можно так сделать?
можно
анализируй строку
но это тебя не убережет от погрешностей в doudle всегда найдется число которое неточно выразится
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
21.03.2013, 08:09  [ТС]     Отбросить нули #23
Цитата Сообщение от ValeryS Посмотреть сообщение
можно
анализируй строку
но это тебя не убережет от погрешностей в doudle всегда найдется число которое неточно выразится
Можешь пример кода привести?
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
21.03.2013, 17:46     Отбросить нули #24
я бы сделал так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char cc;
do
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
 
A=strtod(a,&c);
int tmp=A*100;
A=(double)tmp/100.0;
 
printf("A=%.2f \n",A);
 
 
printf("Ваше число для работы  A=%.2f \n Желаете продолжить Y или введите другое N",A);
scanf("%c", &cc);
 
}while(cc!='Y);
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
21.03.2013, 18:04  [ТС]     Отбросить нули #25
Цитата Сообщение от ValeryS Посмотреть сообщение
я бы сделал так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char cc;
do
{
printf("Введите значение числа A(Не более 16 символов)\n");
scanf("%s", a);
 
A=strtod(a,&c);
int tmp=A*100;
A=(double)tmp/100.0;
 
printf("A=%.2f \n",A);
 
 
printf("Ваше число для работы  A=%.2f \n Желаете продолжить Y или введите другое N",A);
scanf("%c", &cc);
 
}while(cc!='Y);
А есть функция чтобы округление убирать?
IrineK
Заблокирован
21.03.2013, 18:23     Отбросить нули #26
Убирает округление floor: http://www.cplusplus.com/reference/cmath/floor/
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
21.03.2013, 18:25  [ТС]     Отбросить нули #27
Цитата Сообщение от IrineK Посмотреть сообщение
Убирает округление floor: http://www.cplusplus.com/reference/cmath/floor/
Floor округляет к меньшим значениям
IrineK
Заблокирован
21.03.2013, 18:30     Отбросить нули #28
Тогда уточните термин "убирает округление".
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
21.03.2013, 18:36  [ТС]     Отбросить нули #29
Цитата Сообщение от IrineK Посмотреть сообщение
Тогда уточните термин "убирает округление".
Вот к примеру double принимает 16 символов максимум и если я пишу больше 16 символов то чтобы он просто брал эти первые 16 символов и не округлял последний символ
Пример: ввожу 777777777777777777777777777777777777777777777777777777777
Должен вывести: 7777777777777777 а не 7777777777777778
Ну это я условный пример привел мне это нужно сделать в целой и дробной части
IrineK
Заблокирован
21.03.2013, 18:42     Отбросить нули #30
Работайте со строками, при необходимости перегоняйте их в числа. В свое структуре или классе можно держать отдельно целую и дробную части, любой желаемой размерности.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:44     Отбросить нули
Еще ссылки по теме:

из N выставленных оценок отбросить минимальную и максимальную и усреднить оставшиеся оценки C++
C++ Как отбросить сотые без округления?
Как отбросить последние символы строки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
21.03.2013, 18:44     Отбросить нули #31
C++
1
2
3
4
Можно выводить по формату %12.6g
Тогда 6 - количество значащих цифр.
Если число не поместиться в поле из 12 позиций,
то выведется в экспоненциальном формате
Yandex
Объявления
21.03.2013, 18:44     Отбросить нули
Ответ Создать тему
Опции темы

Текущее время: 09:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru