Как убрать дробную часть из десятичной? - PullRequest
4 голосов
/ 13 сентября 2010

Как убрать дробную часть при форматировании десятичного типа в .NET?Мне нужен общий синтаксис для обоих вариантов.Есть ли какое-нибудь щадящее решение?

            decimal a = 1.22M;
            decimal b = 1.00M;

            String.Format("${0}", a); // result is $1.22
            String.Format("${0}", b); // result is $1.00, should be $1, HOW?

Ответы [ 8 ]

7 голосов
/ 13 сентября 2010

Предполагая, что «общий синтаксис» означает, что вам нужно одно решение для обоих выходов, String.Format("${0:#.##}", x) добивается цели. Когда x равно 1.00M, результат будет "$1". когда x равно 1.22M, результат равен "$1.22".

4 голосов
/ 13 сентября 2010

Попробуйте это - оба выведут соответствующий символ валюты для текущей системы:

a.ToString("C2");  // Outputs 2DP
b.ToString("C0"); // Outputs no DP

Если вам нужно указать конкретный символ валюты, используйте то же, что и выше, но замените N на C.

2 голосов
/ 13 сентября 2010

В VB.NET я бы использовал

 CINT(INT(a))

Я полагаю, существует вариант C #.

Я нашел вероятное решение по этой ссылке:

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

Для дальнейшего объяснения:

decimal a = 1.55M;
Console.WriteLine("$" & CInt(Int(a)).ToString()); // result is $2

decimal b = 1.22M;
Console.WriteLine("$" & CInt(Int(b)).ToString()); // result is $1

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

2 голосов
/ 13 сентября 2010

Тип Decimal предназначен для отслеживания количества значащих цифр. Вот почему 1.00M.ToString() возвращает строку 1.00.

Для печати Decimal без дробной части вы можете использовать спецификатор формата N с точностью 0:

1.22M.ToString("N0") => "1"
1.00M.ToString("N0") => "1"
1.77M.ToString("N0") => "2"

Это округлит Decimal в процессе конвертации.

0 голосов
/ 01 января 2014
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            double n, x;
            int a, dec = 0;
            Console.WriteLine("Enter double");
            n = Convert.ToDouble(Console.ReadLine());

            a = Convert.ToInt32(n);
            x = n - a;
            if (x < 0)
                a--;
            int k = 1000;
            for (int i = 0; i < n.ToString().Length; i++)
            {
                if (n.ToString()[i] == '.')
                    k = i;
                if (i > k)
                    dec = dec * 10 + (n.ToString()[i]-48);
            }

            Console.WriteLine("Non-fraction " + a);
            Console.WriteLine("Fraction " + dec);


            Console.ReadKey();

        }


    }
}
0 голосов
/ 13 сентября 2010

Я предполагаю, что это только для отображения и не для изменения типа данных на INT, когда число не имеет значения после десятичного числа.

с использованием системы;

namespace stackOverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            decimal a = 1.2245M;
            decimal b = 1.00M;



            Console.WriteLine("Your percentage to date is: {0:#.#####}", a);
            Console.WriteLine("Your percentage to date is: {0:#.#####}", b);//#.#### gives number upto 4 decimal
            Console.ReadLine();

        }


    } 

}
0 голосов
/ 13 сентября 2010

Я думаю, здесь есть и другие проблемы.Если вопрос состоит в том, чтобы полностью игнорировать десятичные разряды, то просто приведение к целому числу даст требуемый результат, но, очевидно, потеряет точность, что не очень хорошая вещь.

При форматировании в виде строки есть также соображения округления, как в примере ниже.

decimal a = 1.55M;
Console.WriteLine(a.ToString("C0")); // result is $2

decimal b = 1.22M;
Console.WriteLine( b.ToString( "C0" ) ); // result is $1
0 голосов
/ 13 сентября 2010
string.Format("${0:0}",b)

В C # вы можете использовать {0}, чтобы сообщить параметр, и {0:format}, чтобы сообщить параметр в формате.

EDIT

О, я подумал, что ОП хочет сделать, это удалить цифры b. Но теперь я понял, что он хочет убрать бесполезные нули.

string.Format("${0:#.##}",b)
...