Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 18.05.2018
Сообщений: 30

Разделить дробное число на два целых (long и ushort)

09.10.2018, 11:10. Показов 3925. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Число должно быть представлено двумя полями: целая часть - длинное целое со знаком, дробная часть - беззнаковое короткое целое.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2018, 11:10
Ответы с готовыми решениями:

Разделить дробное число на целое и остаток
Есть дробное число, например 14.4054 Нужно убрать в отдельную переменную целую часть. Типа того: float fN = 14.1319139 float fO...

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p и возвращает ap. Помогите...

Как разделить переменую типа double на целое и дробное число ?
Как разделить переменую типа double на целое и дробное число ? Добавлено через 23 минуты Нашол решение : #include <iostream> ...

8
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
09.10.2018, 11:12
ПрограммКатя, а что вы уже сделали?
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
09.10.2018, 11:29
ПрограммКатя,
какой результат должен получиться при разбиении к примеру числа 1.0002 ?
0
1 / 1 / 0
Регистрация: 18.05.2018
Сообщений: 30
09.10.2018, 11:44  [ТС]
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
class Fractions
    {
        public long c;
        public double d;
        private double num;
        public Fractions(double num)
        {
            this.num = num;
        }
        public void dismemberment()
        {
           c = (long) Math.Truncate(num);   //целая часть 
           d =  (num -  c);        //дробная часть
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            double num = Convert.ToDouble( Console.ReadLine());
            Fractions p = new Fractions(num);
             p.dismemberment();
            Console.WriteLine("Целая часть" + p.c);
            Console.WriteLine("Дробная часть " + p.d);
            Console.ReadKey();
        }
    }
Получается дробная часть с типом double, а как сделать ее целой не знаю

Добавлено через 1 минуту
Я не знаю, в задании требуется это, не представляю сама что это будет, подумала может у вас есть идеи, как хранить 0002 в целом виде..
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
09.10.2018, 12:04
ПрограммКатя, можно хранить дробную часть в строке "0002", если строка никак не подходит, то можно хранить перевёрнутое значение, то есть 0002 будет храниться как 2000, но это потребует дополнительных функций по преобразованию туда и обратно.

Ну или сделать ещё третью переменную, в которой хранить количество нулей после запятой.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
09.10.2018, 12:12
ПрограммКатя, попробуйте сначала сделать простой класс
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
class SuperDouble
{
   public long Celoe{get;set;}
   public ushort Drobnoe {get;set;}
   int hmz =0;
   
   public SuperDouble(double Value)
  {
      SetValues(Value);
  }
  
 private void SetValues(double Value)
{
   Celoe =Value;
  Drobnoe =GetDrobnoe(Value);
 
}
 
ushort GetDrobnoe(double Value)
{
  ushort res;
  try{
   var dStr =Value.ToString().Split('.')[1];
foreach(var n in dStr.ToCharArray())
            {
                if(n=='0')
                {
                  hmz++;
                }else { break; }
            }
   res =Convert.ToUInt16 (dStr);
}catch{res =0;}
return res;
}
 
string DrobnajaChast
{
   get
   {
    var res ="";
    for(int i=0;i<hmz;i++)
{
  res+="0";
}
res+=Drobnoe;
    return res;
   }
}
 
public ovveride ToString()
{
 return string.Format("Целая часть: {0} Дробная часть: {1} Значимая часть дробной: {2}",Celoe,DrobnajaChast, Drobnoe);
}
}
А далее пользуйтесь им:

C#
1
2
3
4
5
6
7
8
9
class Program
{
static void Main(string[] args)
{
double num = Convert.ToDouble( Console.ReadLine());
Console.WriteLine(new SuperDouble(num).ToString());
Console.ReadKey();
}
}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,080
Записей в блоге: 2
09.10.2018, 12:23
Цитата Сообщение от ПрограммКатя Посмотреть сообщение
Получается дробная часть с типом double, а как сделать ее целой не знаю
Это зависит от того сколько знаков Вам надо. ushort - это 16 двоичных знаков. Следовательно
C#
1
ushort ДробнаяЧасть = (ushort ) math.Round(d * 0x1_00_00, 0);
Добавлено через 4 минуты
Обратная конвертация в тип double будет так
double num = (double) с + ((double) ДробнаяЧасть) / 0x1_00_00;

Добавлено через 1 минуту
Результат последовательного применения прямого и обратного преобразования совпадать не будут - накапливаются ошибки округления.
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
09.10.2018, 12:33
Элд Хасп, Интересный вариант, но очень уж неточно получается:
на входе : 1,000236
после двойного преобразования: 1,00022888183594
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,080
Записей в блоге: 2
09.10.2018, 12:59
Цитата Сообщение от griffon88 Посмотреть сообщение
Элд Хасп, Интересный вариант, но очень уж неточно получается:
на входе : 1,000236
после двойного преобразования: 1,00022888183594
Вы же сами выбрали тип для дробной части - ushort. Это всего 16 двоичных знаков, то есть 5 - десятичных. Выберите другой тип - будет точнее.

Добавлено через 7 минут
Так же имейте ввиду двоичное и десятичное представление дробной части - сильно различается. В десятичном представлении, после перевода дробного числа 0.5 в ushort, вы получите - 32768 .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.10.2018, 12:59
Помогаю со студенческими работами здесь

Как разбить дробное число на 2 целых?
Добрый день. Интересует вопрос как при вводе числа с запятой в Edit мне разбить это число, и записать в одну переменную целую часть...

Переменную типа ushort разделить на 2 Byte
Здравствуйте, Господа. Раньше программировал на Делфи, перехожу на шарп. нужен код, который бы разделил число на два байта. Есть...

Разделить дробное число на 2 части: целая часть числа и его дробная часть
Пользователь вводит с клавиатуры сумму в валюте (дробное число). Вывести по отдельности количество Рублей и количество копеек (например,...

Разделить с выводом остатка два произвольных десятичных положительных целых числа
Напишите программу, позволяющую делить с выводом остатка два произвольных десятичных положительных целых числа.

Написать функцию, которая принимает два параметра типа unsigned long long и выводит их на экран
Я самое наглое , ленивое и бессовестное чудовище)) но тем не менее Напишите функцию, которая принимает два параметра типа unsigned...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru