string.Format没有小数位,给出了意外的舍入

时间:2011-03-07 17:33:16

标签: c# string

我需要更新一些现有代码,以便(有条件地)显示一个没有任何小数位的数字。

使用以下两行取决于是否需要“£”符号。

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 个答案:

答案 0 :(得分:6)

格式化数字时,它总是以您选择的精度四舍五入到最接近的数字。例如,如果使用一个小数位格式,则0.86将舍入为0.9,而0.96将舍入为1.0。

同样,如果您打印时没有小数位,则2​​3699.99将舍入为23700,因为23700是没有小数位的数字,最接近23699.99。

如果您想要向下舍入使用Math.Floor。

答案 1 :(得分:0)

与上述相同,但有例子:

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