DataFormatString将十进制舍入为更大的值

时间:2012-04-09 13:04:03

标签: c# asp.net .net decimal rounding

DataFormatString="{0:F2}"在我的ascx页面中,值 0.0001 导致“ 0.00 ”,我需要的是“ 0.01 ”,这是从零开始的。是否可以在asp.net中使用DataFormatString实现,还是应该使用一些自定义舍入方法?

3 个答案:

答案 0 :(得分:3)

你不能通过任何一种舍入来实现这一目标。 2位数为0.0001将始终为0.00。

如果你真的想要这个,你需要编写一个转换方法。首先写出规格。

DataFormatString建议使用数据绑定控件,因此您可能需要一个额外的(计算的)列,例如r = (v < 0.01 && r > 0.0) ? 0.01 : v;

答案 1 :(得分:0)

你可以试试这个:

float fno=2.67f;
int no=Convert.ToInt32(fno);

//using Math.Round Function
decimal d=Math.Round(Convert.Toint64(fno));

//if we want after point 2 decimal then
decimal d=Math.Round(Convert.Toint64(fno),2);

答案 2 :(得分:0)

        /// <summary>
        /// Formats a number using a format string without rounding.
        /// </summary>
        /// <param name="value"></param>
        /// <param name="formatString"></param>
        /// <returns></returns>
        public static string Format(object value, string formatString)
        {
            double val;

            if (!Double.TryParse(value.ToString(), out val))
            {
                return "";
            }

            // Special handling for decimals
            if (formatString.Contains("."))
            {
                int multiplier = (int)Math.Pow(10, getDecimalPlaces(formatString) + 1);

                // Handle percentage
                if (!formatString.Contains('%'))
                {
                    multiplier /= 100;
                }

                return (Math.Truncate(val * multiplier) / multiplier).ToString(formatString); // prevent rounding by truncating
            }

            return val.ToString(formatString);
        }