Приложение ядра .net разбирает десятичные дроби в контейнере Docker Linux - PullRequest
0 голосов
/ 25 апреля 2018

Следующий код в приложении .net core 2.0.0 прекрасно работает, когда приложение запускается на компьютере разработки Windows. Когда приложение развертывается в Docker-контейнере Linux, происходит сбой с сообщением об исключении: System.FormatException: 'Входная строка была в неправильном формате.'

Почему? И какой обходной путь?

class Program {
    static void Main(string[] args) {
        var value = "$291.00";
        var valueAsDecimal = decimal.Parse(value, System.Globalization.NumberStyles.Any);
        Console.WriteLine(valueAsDecimal);
        Console.ReadLine();
    }
}

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вот код, который работал. Я должен был вручную установить правильную культуру. Спасибо Ричарду Шнайдеру и Эвку за ваши комментарии.

class Program {
    static readonly CultureInfo USEnglish = new CultureInfo("en-US");
    static void Main(string[] args) {
        var value = "$291.00";
        var valueAsDecimal = decimal.Parse(value, System.Globalization.NumberStyles.Any, USEnglish);
        Console.WriteLine(valueAsDecimal);
        Console.ReadLine();
    }
}

Похоже, что культура по умолчанию, запущенная в док-контейнере FROM microsoft/dotnet:2.0-runtime AS base, является инвариантной культурой:

enter image description here

0 голосов
/ 25 апреля 2018

Знак валюты зависит от региона. Вы проверили, что такое настройки культуры?

Если вы предпочитаете использовать '$' и '.' затем используйте формат Provifeer.

 var valueAsDecimal = decimal.Parse(
     value, 
     NumberStyles.Any, 
     new CultureInfo("en-AU");
...