arvindispra Ответов: 3

Как получить десятичную часть двойного C# с символом плюс или минус


У меня есть, но мне нужно, если десятичная часть меньше 0,5, результат содержит символ минус ( -). а если десятичная часть больше, то равный 0,5 результат содержит символ плюс ( + ).
Я использую следующий код, но он возвращает все десятичные числа с символом ( + ).

предполагать
456.45 [выход должен быть-.45 ]
456.65 [выход должен быть +.65 ]


заранее спасибо

Что я уже пробовал:

double value = Convert.ToDouble(textBox5.Text);
            int result = (int)(((decimal)value % 1) * 100);

            if ((result)<0.5)
            {
                textBox6.Text = "-" + result.ToString();
            }
            else
            {
                textBox6.Text = "+" + result.ToString();
            }

ZurdoDev

Один простой способ-преобразовать в строку и разделить на".", а затем изучить вторую часть. Хотя, наверное, так будет лучше.

F-ES Sitecore

Что делать, если код выполняется в локали, где", " является разделителем?

ZurdoDev

Это не сработает.

Philippe Mori

Узнайте, как использовать отладчик.

Если бы вы внимательно прочитали свой собственный код, вы бы увидели в нем много проблем. Целое число не имеет фракционной части, поэтому сравнивать результат с 0,5 абсолютно бессмысленно. Кроме того, вы умножаете содержимое текстового поля на 100, но остальная часть кода не учитывает это. И мы даже не говорили о преобразовании типов....

Philippe Mori

Когда вы публикуете вопрос, приложите усилия, чтобы правильно отформатировать код в блоке кода. Как Т, ваш вопрос даже не стоит 1 балла.

Sergey Alexandrovich Kryukov

В первую очередь: число с плавающей запятой не имеет "десятичной части".
—СА

3 Ответов

Рейтинг:
26

OriginalGriff

Попробуй:

double d = 456.45;
double x = d - Math.Truncate(d);
if (x < 0.5) x = -x;
Console.WriteLine(x);


Рейтинг:
14

Andy Lanng

Вы умножаете на 100, а затем сравниваете его с 0,5!

double value = Convert.ToDouble(textBox5.Text);
int result = (int)(((decimal)value % 1) * 100);

if ((result)<50)
{
textBox6.Text = "-" + result.ToString();
}
else
{
textBox6.Text = "+" + result.ToString();
}


Рейтинг:
10

F-ES Sitecore

Научитесь отлаживать свой код. Если вы пройдете через него, что будет в "результате" для "456.45"? Это 45, но вы предполагаете, что результат 0.45. Когда вы что-то "% 1", Вы получаете остаток (.45), который затем умножаете на 100, чтобы получить 45. Я предполагаю, что вы делаете это, чтобы сделать его допустимым int, но если вы сравниваете дроби, то вы не можете использовать ints.

Во-вторых, не используйте double для дробей с такой точностью, используйте decimal, поскольку decimal точен, а double-это приближение вашего числа.

decimal value = Convert.ToDecimal(textBox5.Text);
decimal result = value % 1;

if (result < 0.5M)