繁体   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