none
Помощь по форматированию вывода

    Вопрос

  • Изучаю язык C#  по книге Герберта Шилдта, в форматировании ввода вывода есть пример программы, переношу его в VisualStudio, и, вместо, Цена со скидкой: 16,96$ программа выдает Цена со скидкой: 16,96 ? 

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

    Вот код 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                decimal price, discount, discounted_price;
                price = 19.95m;
                discount = 0.15m;
                discounted_price = price - (price * discount);
                Console.WriteLine("Цена со скидкой: {0:C} ", discounted_price);
                Console.ReadLine();
            }
        }
    }

    Заранее спасибо за помощь.

    19 марта 2017 г. 16:01

Ответы

  • Это не "проблема", а поддержка глобализации. Региональные настройки вашей ОС разные, поэтому и вывод разный.

    Можете либо сменить настройки, либо указывать культуру (данные локализации) в явном виде:

    var ci = CultureInfo.GetCultureInfo("en-us");

    var formatted = string.Format(ci, "Цена со скидкой: {0:C} ", discounted_price);

    Только вывод будет таким: Цена со скидкой: $16.96 

    Знак доллара указывается перед числом. Если в книге напечатано по другому то переводчик скорее всего "скорректировал" думая что так "правильнее".

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


    This posting is provided "AS IS" with no warranties, and confers no rights.


    19 марта 2017 г. 16:43
  • Вы хоть смотрите что пишете, значение только в переменной сохраняенте и не выводите
    20 марта 2017 г. 10:16

Все ответы

  • Это не "проблема", а поддержка глобализации. Региональные настройки вашей ОС разные, поэтому и вывод разный.

    Можете либо сменить настройки, либо указывать культуру (данные локализации) в явном виде:

    var ci = CultureInfo.GetCultureInfo("en-us");

    var formatted = string.Format(ci, "Цена со скидкой: {0:C} ", discounted_price);

    Только вывод будет таким: Цена со скидкой: $16.96 

    Знак доллара указывается перед числом. Если в книге напечатано по другому то переводчик скорее всего "скорректировал" думая что так "правильнее".

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


    This posting is provided "AS IS" with no warranties, and confers no rights.


    19 марта 2017 г. 16:43
  • Переписал, теперь текст вообще не выводится

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main(string[] args)
            {
                decimal price;
                decimal discount;
                decimal discounted_price;
                price = 19.95m;
                discount = 0.15m;
                discounted_price = price - (discount * price);
                var ci = CultureInfo.GetCultureInfo("en-us");

                var formatted = string.Format(ci, "Цена со скидкой: {0:C} ", discounted_price);
                Console.ReadLine();
            }
        }
    }

    20 марта 2017 г. 10:06
  • Вы хоть смотрите что пишете, значение только в переменной сохраняенте и не выводите
    20 марта 2017 г. 10:16
  • Спасибо большое!
    20 марта 2017 г. 17:45
  • ВЫ правы, спасибо))) Исправил, теперь все ОК)
    20 марта 2017 г. 17:45