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

Разбить число на целую и дробную часть

13.10.2011, 14:16. Показов 110704. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как разбить число на целую и дробную части? Например, дано число 10,2 и должно получиться число 10 и число 0,2, заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2011, 14:16
Ответы с готовыми решениями:

Получить целую и дробную часть double
Доброго времени суток, такая задача : есть число 12.25(к примеру ) тип double, нужно отдельно взять...

Получить целую и дробную часть вещественного числа
Дано вещественное число x. Получить целую и дробную часть числа x. Нужно написать на C# и сделать...

CultureInfo.InvariantCulture не делит целую и дробную часть
День добрый! Есть такая строка: STOLB.Add(double.Parse(strSEP, CultureInfo.InvariantCulture));...

перевод из троичной в двоичную имеющих целую и дробную часть
проблема в реализации задачи,выводится рандомное число в троичной системе,как целое так и...

18
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
13.10.2011, 14:33 2
Целая часть извлекается методами Math.Floor() или Math.Truncate(). Для получения дробной части можно из исходного числа вычесть целую часть или использовать оператор %.
1
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
13.10.2011, 15:01 3
Можно просто приведением к целому виду:
C#
1
int x = (int)10.02;
0
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
13.10.2011, 15:04 4
kolorotur, недавно вроде в какой-то теме были дебаты насчет того, приведение к целому выделяет целую часть или округляет. Чем они закончились?
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
13.10.2011, 22:40 5
Ereona, как-то я не заметил этой темы.
При касте decimal к int, значение округляется в сторону нуля ближайшего целого.
При касте double и float к int, дробная часть отбрасывается.

Смотрим спецификацию C# v4.0, часть 6.2.1 - Explicit numeric conversions
1
1 / 1 / 0
Регистрация: 25.07.2016
Сообщений: 5
26.08.2017, 18:32 6
Цитата Сообщение от kolorotur Посмотреть сообщение
Ereona, как-то я не заметил этой темы.
При касте decimal к int, значение округляется в сторону нуля ближайшего целого.
При касте double и float к int, дробная часть отбрасывается.

Смотрим спецификацию C# v4.0, часть 6.2.1 - Explicit numeric conversions
Ответ малость неточен и вводит некую двойственность, хотя оной в реале нет.
Цитаты из C# Language Specification 5.0(rus):
Для преобразований из типа decimal к целому типу исходное значение округляется в сторону нуля до ближайшего целого значения. Результатом преобразования является полученное целое значение. ...
Для преобразований из типа float или double к целому типу... исходный операнд округляется в сторону нуля до ближайшего целого значения. ...
То есть, в обоих случаях что decimal к int, что double/float к int, - идёт округление в сторону нуля, что соответствует простому отрезанию дробной части. То есть, никакой разницы нет, явное приведение к типу int работает одинакого. Скорей всего пользователь с ником Ereona, имела ввиду разницу в конвертации в целочисленный тип: при использовании явного привединия и при использовании группы методов из класса Convert. При явном приведении будет простое отрезание дробной части. А вот при использовании к примеру метода Convert.ToInt32() можно конкретно попасть на нежданчик, ибо там как раз использутеся округление дробной части к ближайшему целому, да ещё в некоторых случаях конкретно к чётному целому. К примеру, число 2.41 он отработает корректно и вернёт назад число 2, просто отрезав дробную часть. А вот число 2.61 он округлит до числа 3, т.к. дробная часть более 0.5. В общем, вот такой вот нежданчик затаился в камышах ))). Лучше пользоваться обычным явным приведением, там всё просто как топор - тупо режем дробную часть и не паримся ))).
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
26.08.2017, 20:37 7
Цитата Сообщение от Ereona Посмотреть сообщение
Math.Floor()
У Floor чуть иное поведение для отрицательных чисел.
0
5 / 5 / 0
Регистрация: 07.08.2017
Сообщений: 33
27.08.2017, 13:44 8
C#
1
2
3
4
string str = System.Convert.ToString(10.02f);
string[] parts = str.Split('.');
Console.WriteLine("Целая часть: " + parts[0]);
Console.WriteLine("Дробная часть: " + parts[1]);
Нет возможности проверить на работоспособность, но должно сработать.
P.S. Знаю, очень костыльно

Добавлено через 12 секунд
C#
1
2
3
4
string str = System.Convert.ToString(10.02f);
string[] parts = str.Split('.');
Console.WriteLine("Целая часть: " + parts[0]);
Console.WriteLine("Дробная часть: " + parts[1]);
Нет возможности проверить на работоспособность, но должно сработать.
P.S. Знаю, очень костыльно
1
0 / 0 / 0
Регистрация: 30.05.2019
Сообщений: 1
25.03.2020, 13:29 9
Можно использовать метод Math возвращающий целую часть.
Это будет как-то так
C#
1
2
3
4
5
6
7
8
9
decimal decimalNumber;
 
decimalNumber = 32.7865m;
// Displays 32
Console.WriteLine(Math.Truncate(decimalNumber));
 
decimal  decimalNumber2 =decimalNumber - Math.Truncate(decimalNumber);
Console.WriteLine(decimalNumber2);
// Displays 0.7865
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
25.03.2020, 14:47 10
Dowow Team, для такого способа сначала надо запросить у винды текущий язык ввода, затем для него в локали найти разделитель целой и дробной части чисел, а затем уже применять его для сплита.
0
0 / 0 / 0
Регистрация: 24.03.2020
Сообщений: 6
27.03.2020, 18:58 11
Пример готового решения:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 // Использовать модификатор параметра out.
using System;
class Decompose {
/* Разделить числовое значение с плавающей точкой на
целую и дробную части. */
public int GetParts(double n, out double frac) {
int whole;
whole = (int) n;
frac = n - whole; // передать дробную часть числа через параметр frac
return whole; // возвратить целую часть числа
}
}
class UseOut {
static void Main() {
Decompose ob = new Decompose();
int i;
double f;
i = ob.GetParts(10.125, out f);
Console.WriteLine("Целая часть числа равна " + i);
Console.WriteLine("Дробная часть числа равна " + f);
}
}
0
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 70
09.10.2021, 20:45 12
C#
1
return whole; // возвратить целую часть числа
Куда возвращается whole?
Почему i=10 ?
Разве значение
C#
1
ob.GetParts
равно 10?
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.10.2021, 21:08 13
Цитата Сообщение от MaxRik Посмотреть сообщение
Куда возвращается whole?
Туда, где вызван метод GetParts.
В данном примере — в 18-ю строку.

Цитата Сообщение от MaxRik Посмотреть сообщение
Почему i=10 ?
Потому что это целая часть от 10,125.

Цитата Сообщение от MaxRik Посмотреть сообщение
Разве значение ob.GetParts равно 10?
Иногда.
1
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 70
09.10.2021, 21:09 14
Два кода:

Код №1:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Decompose
    {
        public int GetParts(double n,out double frac)
        {
            int z;
            z =(int)n; //(int)n- это преобразование одного типа в другой, то есть отбрасывание дробной часть, так int  это тип для целых чисел. 
            frac = n - z;// передать дробную часть числа через параметр frac с помощью модификатора out
            return z; // возврат целой части числа обратно из метода 
        }
    }
    class UseOut
    {
        static void Main()
        {
            Decompose ob = new Decompose();
            Console.WriteLine("Введите дробное число : ");
            double z = Convert.ToDouble(Console.ReadLine());
            ob.GetParts(z, out double f);
            Console.WriteLine("Целая часть числа равна "+z);
            Console.WriteLine("Дробная часть числа равна "+f);
        }
Код №2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Decompose
    {
        public int GetParts(double n,out double frac)
        {
            int z;
            z =(int)n; //(int)n- это преобразование одного типа в другой, то есть отбрасывание дробной часть, так int  это тип для целых чисел. 
            frac = n - z;// передать дробную часть числа через параметр frac с помощью модификатора out
            return z; // возврат целой части числа обратно из метода 
        }
    }
    class UseOut
    {
        static void Main()
        {
            Decompose ob = new Decompose();
            Console.WriteLine("Введите дробное число : ");
            double z = Convert.ToDouble(Console.ReadLine());
            z=ob.GetParts(z, out double f);
            Console.WriteLine("Целая часть числа равна "+z);
            Console.WriteLine("Дробная часть числа равна "+f);
        }
В коде номер один Z не целое , хотя по коду возвращается целое.
В коде номер два Z , как надо целое , но мне не понятна конструкция :
C#
1
 z=ob.GetParts(z, out double f);
Что в ней происходит.
Растолкуйте , пожалуйста.
0
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
09.10.2021, 21:13 15
Цитата Сообщение от MaxRik Посмотреть сообщение
В коде номер один Z не целое , хотя по коду возвращается целое.
Оно возвращается, но возвращаемое значение нигде не сохраняется.

Цитата Сообщение от MaxRik Посмотреть сообщение
В коде номер два Z , как надо целое
Потому что возвращаемое значение присваивается переменной z.

Цитата Сообщение от MaxRik Посмотреть сообщение
не понятна конструкция z=ob.GetParts(z, out double f);
Вызывается метод GetParts, в него первым аргументом передается значение переменной z, вторым — переменная f.
Результат метода (возвращаемое значение) записывается обратно в переменную z.
1
0 / 0 / 0
Регистрация: 29.09.2021
Сообщений: 70
09.10.2021, 21:40 16
...а так как переменная F по сути не возвращается , а передаётся по ссылке , то она ни как не фигурирует в значении z .
Так ?
А если бы возвращалось бы две переменные , то они как бы записались в z ?
Не знаю правильно ли я вообще задал последний вопрос.

Добавлено через 20 минут
Благодарю. Вроде уложилось
0
0 / 0 / 0
Регистрация: 26.07.2022
Сообщений: 1
26.07.2022, 14:26 17
C#
1
2
3
double number = 123.5;
int whole = (int)number; // получаем целую часть
double frac = number % 1; // получаем дробную часть
0
help
4253 / 3856 / 782
Регистрация: 13.04.2015
Сообщений: 8,531
26.07.2022, 14:32 18
Deb4ik, уверен, что твой код работает правильно?
0
help
4253 / 3856 / 782
Регистрация: 13.04.2015
Сообщений: 8,531
26.07.2022, 14:40 19
Например

Разбить число на целую и дробную часть
0
26.07.2022, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2022, 14:40
Помогаю со студенческими работами здесь

Неточности округления при разделении числа на целую и дробную часть
double num, fractional; int integral; double.TryParse(textBox1.Text, out...

Разбить число на целую и дробную часть
Определить равна ли сумма цифр целой части действительного числа сумме такого же количества цифр в...

Разбить число на целую и дробную часть
Возможно-ли разбить число x, допустим, это- "3.142", на целую и дробную часть. Именно чтобы было...

Разбить число на целую и дробную части
Доброе время суток,уважаемые посетители форума! Возникла след. проблема.Необходимо действительное...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru