簡體   English   中英

如何從小數中取出分數部分?

[英]How to take away fraction part from decimal?

如何在.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?

假設'common syntax'意味着你需要一個解決方案來提供兩個輸出, String.Format("${0:#.##}", x)就可以了。 x1.00M ,結果為"$1" x1.22M ,結果為"$1.22"

試試這些 - 兩者都會輸出當前系統的相應貨幣符號:

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

如果您需要提供特定的貨幣符號,請使用與上面相同的內容,但將N替換為C.

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

在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

我會避免使用貨幣格式,因為小數是該類固有的。

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();

        }


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

在C#中,您可以使用{0}來告訴參數,使用{0:format}來告訴參數格式。

編輯

哦,我認為OP想要做的是刪除b的數字。 但現在我意識到他想要刪除無用的零。

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

我認為還有其他問題。 如果問題是完全忽略小數位,那么只需轉換為整數就會產生所需的輸出,但顯然會失去精度,這不是一件好事。

在格式化為字符串時也存在舍入注意事項,如下例所示。

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

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

我認為這只是為了顯示而不是在數字在十進制之后沒有值時將數據類型更改為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();

        }


    } 

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM