Получение округленного значения из двойного результата

Я хочу отобразить чистую сумму расчета в двух текстовых полях

if netamount = 45.60

первое текстовое поле должно показывать округленное значение, а следующее текстовое поле должно показывать округленное значение.

Раньше я делал это с помощью c с помощью ручной программы округления, и теперь мой менеджер не хочет, чтобы я делал что-то подобное, потому что он считает, что в С# есть вся математика в функциях сборки. Так что помогите друзья....

Я хочу получить округленное значение, а не числа после запятой


EDIT: (от drachenstern)

я хочу округлить число с точностью до 10, например 45,8456789990, и получить результат, например, 46 в одном текстовом поле и 85 в другом.

У спрашивающего есть число вроде double pi = 3.14159265d;, и он хочет получить два окна сообщения постфактум: [Целое число] 3 и [2 десятичных знака] 14, и он хочет знать, как лучше всего достичь этого эффекта. Он знает только, что ему дадут двойное число, но не знает, будут ли у этого числа дробные значения. Он ожидает их. Надеюсь, это изменение поможет.


person Karthik Ratnam    schedule 13.11.2010    source источник
comment
Проверьте функцию Math.Round   -  person Ozzy    schedule 13.11.2010
comment
@karthikRatnam, значит, вы хотите писать свой собственный код, а не доверять библиотекам, и хотите, чтобы разработка того же кода заняла больше времени? Я бы сделал то же самое, что и ты, управляющий, будь я им.   -  person jcolebrand    schedule 13.11.2010
comment
если я вас смущаю, продолжайте в том же духе... я хочу округлить число с точностью до 10, например 45,8456789990, и получить результат вроде 46 в одном текстовом поле и 85 в другом. Можете ли вы, ребята, получить мой вопрос сейчас ... (если у вас есть какие-либо другие предложения, а затем использовать библиотеку ... пожалуйста, скажите мне это, пожалуйста)   -  person Karthik Ratnam    schedule 13.11.2010
comment
@KarthikRatnam ~ в следующий раз отредактируйте свой вопрос или сначала начните с этого примера. Спасибо.   -  person jcolebrand    schedule 14.11.2010
comment
ой. Извини. в следующий раз отредактирую   -  person Karthik Ratnam    schedule 14.11.2010
comment
@KarthikRatnam ~ Посмотрите, подходит ли вам этот ответ.   -  person jcolebrand    schedule 14.11.2010


Ответы (4)


Предлагаю для простоты разделить его на три части:

int wholeNumber; //for getting the left part of the number
int decimalPartTwoPlaces; //for assigning the right part to two characters
double pi = 3.14159265d;

wholeNumber = Math.Round(pi);
decimalPartTwoPlaces = Math.Round( ( pi - (double)wholeNumber ) * 100 ); // cast so it doesn't try and truncate the pi part

И это должно иметь значения, которые вы хотите. Я не проверял это, но это выглядит правильно. Дайте мне знать, если это не сработает, и я запущу его на своем компьютере и отлажу.

person jcolebrand    schedule 13.11.2010
comment
Оно работает. Я не знаю, что math.round можно использовать и так. Это ново для меня. Спасибо. для того, чтобы очистить мой вопрос и дать ответ тоже. Поскольку Эндрю предположил, что реальной математической функции не существует, сделайте решение... я передам это в качестве вывода моему менеджеру. Пусть решает. :) - person Karthik Ratnam; 14.11.2010
comment
Ну, это тот случай, ЕСЛИ они вам нужны в двух текстовых полях. На самом деле есть несколько способов сделать это. Но все они будут работать примерно в одно и то же время. - person jcolebrand; 14.11.2010
comment
Я не понимаю вашего последнего комментария. Почему вы удалили ответ, он не работал? - person jcolebrand; 14.11.2010
comment
Это нормально. Если это не сработало, я хотел помочь вам выяснить, почему. - person jcolebrand; 14.11.2010

Математика.Раунд? http://msdn.microsoft.com/en-us/library/75ks3aby.aspx

После уточнения @drachenstern:

Math.Round(value, 2)

Документы: http://msdn.microsoft.com/en-us/library/zy06z30k.aspx

person icyrock.com    schedule 13.11.2010
comment
нет, нет, чувак... я знаю функцию math.round, я не спрашиваю об этом.... я спрашиваю, как получить округленное значение.... функция round тоже есть в c. Я спрашиваю, как получить округленное значение. Вы понимаете это (и ч/б, кто поставил 3 апа за этот простой ответ :( - person Karthik Ratnam; 13.11.2010
comment
Тогда я не понимаю, что такое округленное значение - можете ли вы объяснить/привести пример? Насколько я понял, в приведенном выше примере левое текстовое поле должно содержать 45, а правое 60. Если нет, то что оно должно содержать? - person icyrock.com; 13.11.2010
comment
слева должно быть 46, а справа должно быть 60, все в порядке. как вы получите значение 60, используя math.round, мой вопрос? - person Karthik Ratnam; 13.11.2010
comment
Не напрямую, а: 45.60 - Math.Truncate(45.60) = 0.60 - person icyrock.com; 13.11.2010
comment
но почему msdn говорит --public static decimal Truncate(decimal d) Truncate округляет d до ближайшего целого числа ближе к нулю. - person Karthik Ratnam; 13.11.2010
comment
@KarthikRatnam ~ Это то, что демонстрирует пример @icyrock ... Почему бы просто не взять часть кода (int)46.60, а затем вычесть целое число из числа с плавающей запятой? - person jcolebrand; 13.11.2010
comment
то, что я реализовал, не является логически правильным ... это проблема drachenstern ... логика состоит в том, чтобы получить округленное значение числа, но не получить число после десятичной части ... вы можете понять ситуацию в реальном мире .. где мы получаем двойное значение с точностью до 10 или около того ... вы отобразите .34252523 в текстовом поле? - person Karthik Ratnam; 13.11.2010
comment
оооо, хорошо, теперь я вижу, чего ты хочешь. - person jcolebrand; 14.11.2010
comment
@Karthik Итак, когда вы получаете 45.123456, вы хотите, чтобы 45 слева и 12 справа, верно? Если это так, сделайте что-нибудь вроде Math.Round(value, 2). - person icyrock.com; 14.11.2010
comment
Ну, технически ОН пояснил, я только что отредактировал его вопрос для него;) - person jcolebrand; 14.11.2010
comment
@drachenstern Спасибо за это! - person icyrock.com; 14.11.2010
comment
ответ, который вы предоставили, работал только для первого вывода текстового поля ... код вывода второго текстового поля был неправильным ... можете ли вы снова создать тот же код ... чтобы я мог проверить и отредактировать по мере необходимости - person Karthik Ratnam; 14.11.2010
comment
@icyrock ... Я ищу вывод десятичной части, а не первое текстовое поле ... ваш ответ имеет только одно значение ... как я могу получить правильное текстовое значение из вашего кода? - person Karthik Ratnam; 14.11.2010
comment
Спасибо, icyrocks ... за ваши ответы на продление ... Я много узнал о math.round и двойных преобразованиях. - person Karthik Ratnam; 14.11.2010

Это можно сделать просто математически, сначала округлив, затем вычитая и умножая на 100 (если вам не нужны два первых десятичных знака), а затем снова округляя следующим образом:

double pi = 3.14159265d;
int integerParth = (int)Math.Round(pi); // 3(int)
double decimalPoint = pi - integerPart; // 0.1415...(double)
int decimalPart = (int)Math.Round(decimalPoint * 100); // 14
person Alxandr    schedule 13.11.2010
comment
Извините, я думаю, что вы оба дали неправильный ответ ... я подозреваю ... для 40,69 это дает - 31 в качестве ответа :( - person Karthik Ratnam; 14.11.2010

Математические функции в С# не могут дать ожидаемое значение

Я попробовал ваш ввод 45,60, используя все математические функции, которые работают с округлением значений.

Вот результат:

Truncate            45
Round           46
Ceiling             46
Floor           45

Я думаю, что для получения результата, например .60, в текстовом поле следует использовать какую-то другую функцию, отличную от этой.

person Andrew Collins    schedule 13.11.2010