Member 12478311 Ответов: 2

Двойной .разобрать не в состоянии


var amt = "2.8-";

double reqamt = Double.Parse(climateString.Replace(",", ""));
            MessageBox.Show(reqamt.ToString());



Я получаю ниже исключение:
"Input string was not in a correct format."



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

Это работает нормально, когда var amt = " -2.8";

Могу ли я заставить это работать, когда var amt = " 2.8-";

Потому что база данных посылает мне результаты типа " 2.8-";

[no name]

Ладно ... так в чем же тогда ваш вопрос, если вы знаете, в чем проблема?

Member 12478311

Мой вопрос таков..

Как я могу заставить его работать, когда var amt = " 2.8-";

ZurdoDev

Снимите конец -.

[no name]

Зачем задавать вопрос, если вы уже знаете ответ? Исправьте данные.

Member 12478311

Я новичок в программировании.
и я хочу знать, может ли c# обрабатывать эти значения.
Это мой вопрос.

[no name]

И вы уже знаете ответ. Очевидно, нет, не может. Данные должны быть в правильном формате.

Member 12478311

Спасибо.

Dave Kreskowiak

Неправильный. Да, это может. Вам просто нужно предоставить formatprovider для его анализа.

2 Ответов

Рейтинг:
6

CPallini

Вы должны сами разобрать трейлинг-знак. Это нетрудно: если строка имеет завершающий минус ( ' - ' ), то используйте double.Parse на ведущей подстроке получить абсолютное значение и в конечном итоге отрицать его.

Что-то вроде:

static double ParseDBNumber(string  s)
{
  double result;
  if ( s.Substring(s.Length-1) == "-")
  {
    result = double.Parse(s.Substring(0, s.Length - 1));
    return  (-result);
   }
   return double.Parse(s);
 }


ZurdoDev

если (S.Метода endswith("-")) // проще

Хотя +5.

CPallini

Правильно! Спасибо.

Dave Kreskowiak

Тебе совсем не обязательно это делать. TryPrase позволяет указать, как разбирать число, включая конечные знаки.

CPallini

Я признаю ваше превосходное решение.

Karthik_Mahalingam

5

CPallini

Спасибо.

Рейтинг:
1

Dave Kreskowiak

Не используйте синтаксический анализ. Использовать метод tryparse.

Вы можете сделать это тихо и легко. Вам просто нужно использовать версию TryPrase, которая позволяет указать FormatProvider, который описывает, как разобрать строку в Double. Для получения дополнительной информации ознакомьтесь с документацией по Double. Это помогает создавать небольшие тестовые программы, чтобы опробовать что-то, в чем вы не уверены, прежде чем бросать код в приложение, над которым вы работаете.

Например:

using System;
using System.Globalization;

namespace TryParse_Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] input = { "2.8", "-2.8", "2.8-", "0", "-2", "2-" };

            NumberStyles style = NumberStyles.AllowDecimalPoint |
                NumberStyles.AllowLeadingSign |
                NumberStyles.AllowTrailingSign |
                NumberStyles.AllowThousands;

            CultureInfo culture = CultureInfo.CurrentUICulture;

            foreach (var number in input)
            {
                double value;

                if (double.TryParse(number, style, culture, out value))
                    Console.WriteLine($"String: '{number}'\tParsed: {value}");
                else
                    Console.WriteLine($"Failed to parse string: '{number}'");
            }
        }
    }
}


CPallini

Ну, приносит знания является лучшим решением, у меня 5.