string.Format без десятичных знаков дает неожиданное округление - PullRequest
2 голосов
/ 07 марта 2011

Мне нужно обновить существующий код, чтобы фигура (условно) отображалась без десятичных знаков.

Следующие две строки используются в зависимости от того, требуется ли знак «£».

currency = string.Format(CultureInfo.CurrentCulture, "{0:£#,0.00}", data);

Или

currency = string.Format(CultureInfo.CurrentCulture, "{0:#,0.00}", data);

Я попытался изменить этот код, чтобы использовать {0: £ #, 0}, и хотя десятичные разряды удалены, значение «данных» 23699,99 было округлено до 23700, а не 23699.

Я пытался {0: £ #, 0} попытаться понять, что происходит, и снова 23699,99 было округлено до 23700.

Кто-нибудь может объяснить, почему это происходит, пожалуйста?

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

Ответы [ 2 ]

6 голосов
/ 07 марта 2011

Когда вы форматируете число, оно всегда округляется до ближайшего числа с выбранной вами точностью. Например, если вы форматируете с одним десятичным знаком, то 0,86 будет округлено до 0,9, а 0,96 будет округлено до 1,0.

Аналогично, если вы печатаете без десятичных разрядов, 23699,99 округляется до 23700, потому что 23700 - это число без десятичных разрядов, ближайшее к 23699,99.

Если вы хотите округлить, используйте Math.Floor.

0 голосов
/ 07 марта 2011

То же, что и выше, но с примером:

using System;
using System.Globalization;

namespace testings
{
    class Program
    {
        static void Main(string[] args)
        {
            string currency;
            decimal data = 23699.99m;
            currency = string.Format(CultureInfo.CurrentCulture, "{0:£#,0}", data);
            Console.WriteLine(currency);

            currency = string.Format(CultureInfo.CurrentCulture, "{0:£#,0.00}", data);
            Console.WriteLine(currency);

            currency = string.Format(CultureInfo.CurrentCulture, "{0:£#,0.00}", Math.Floor(data));
            Console.WriteLine(currency);
            Console.ReadKey(false);
        }
    }
}

возвращает:

£23,700
£23,699.99
£23,699.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...