Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
1
.NET 4.x

Округление денег. Как сделать верно?

14.11.2013, 19:46. Показов 2167. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно есть система которая перегоняет деньги из 1 валюты в другую
но в итоге получается такая фигня.
Допустим мы дали 10 долларов и получили 328,184...
Но у пользователя нету тысячных(десятитысячных итд). (Да и не кто из нас их в глаза не видел )
По идее по правили матики мы должны попросить 328,18 но тут начинает брыкаться банк.
Говоря что этого мало.
Но если дать ему 328,19 то всё уже ок.
Собственно как округлять так что бы для
328,184 - было 328,19
Для
328,180 - было 328,18
Для
328,188 - Было 328,19
Пытаюсь придумать что то красивое и элегантное. По пока что на ум нечего кроме куча if'ов не приходит...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2013, 19:46
Ответы с готовыми решениями:

как сделать чтобы на label1 выходило значение верно или не верно?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int...

Как мне сделать чтобы на label1 выходило значение верно или не верно?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int...

Как сделать систему передачи денег ?
Помогите пожалуйсто, хочу сайт сделать со своей системой выплат, тоесть чтоб человек мог класть...

Как сделать округление до сотых?
procedure TForm1.Button4Click(Sender: TObject); var x,y,z: integer; begin...

3
Администратор
Эксперт .NET
9602 / 4744 / 761
Регистрация: 17.04.2012
Сообщений: 9,592
Записей в блоге: 14
14.11.2013, 19:54 2
C#
1
2
3
4
5
decimal precision = (decimal)Math.Pow(10d, 2d);  // на каком знаке после запятой округлять
decimal money = 328.184m;
 
decimal result = Math.Ceiling(precision * money) / precision;
Console.WriteLine(result);  // 328.19
1
Эксперт .NET
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
14.11.2013, 19:54 3
Округляйте до 3 знаков после запятой: градаций в 1/1000 нет, а из трех знаков банки уже на месте решат, в какую сторону округлять до двух знаков.
Разумеется, округление проводите уже после всех расчетов, чтобы не набегала ошибка.
0
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
14.11.2013, 20:06  [ТС] 4
У меня пока что такой вариант.
Не очевидный но то же работает. О_о (отрицательных чисел быть не может)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        /// <summary>
        /// Округляет деньги в большую сторону
        /// </summary>
        /// <param name="money"></param>
        /// <returns></returns>
        public Decimal MoneyRound(Decimal money)
        {
            var flag = money < 0;
            money = flag ? money * -1 : money;
            money = Math.Round(
                  money +
                  Math.Ceiling(Math.Round(money - (Int32)money, 10) - Math.Round(money - (Int32)money, 2)) *
                  0.01m, 2);
            return flag ? money * -1 : money;
        }
0
14.11.2013, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2013, 20:06
Помогаю со студенческими работами здесь

Как сделать зачисление денег на баланс пользователя?
Всем привет!) Мне уже помогли добрые люди и сделали счетчик &quot;кликов&quot;. То есть, пользователь кликнул...

Как сделать отправку денег за регистрацию на сайте?
Привет. Есть номера кошельков. Kакие пожилает пользователь при регистрации...

Как изменится предложение денег, если возможности банковской системы по созданию денег используются полностью.
Вопрос (e13): Проводя политику дешевых денег, ЦБ выкупает ранее проданные облигации на сумму 100...

Как сделать округление до второго знака в Range
Привет ребят) помогите пожалуйста, программа отказывается делать округление до второго знака в...

Как сделать округление до 50??? (Например 1243 как 1250)
Здравствуйте, может кто-нибудь знает, как сделать округление числа до 50. Например 1998 как 2000, а...

Как сделать свою форму оплаты яндекс денег на сайт
Помогите христа ради. На сайте яндекс ничего не понял. Нужно именно свою, не конструктор форм!...


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

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