[英]string.Format without decimal places gives unexpected rounding
我需要更新一些现有代码,以便(有条件地)显示数字而没有任何小数位。
根据是否需要“£”符号使用以下两行。
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。
有人可以解释为什么会这样吗?
先感谢您。
格式化数字时,它始终会以您选择的精度四舍五入到最接近的数字。 例如,如果您将格式设置为小数点后一位,则0.86将四舍五入为0.9,而0.96将四舍五入为1.0。
同样,如果您不带小数位打印,则23699.99将四舍五入为23700,因为23700是没有小数位最接近23699.99的数字。
如果要四舍五入,请使用Math.Floor。
与上面相同,但带有示例:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.