十进制舍入问题

时间:2011-09-16 17:42:57

标签: c# winforms decimal

以下是我的属性,如果我们输入45然后它会追加45.00但是再次导致45,因为该值是从字符串转换的。那么我能实现这一目标的最简单方法是什么呢?如果他们输入45,那么它将在值字段中产生45.00;

 public decimal Length
    {
        get { if (this is Detail) 
           return ((this as Detail).Length.ToString() == string.Empty)
            ? 0 : (this as Detail).Length; else return 0; }
        set
        {
            if (this is Detail)
            {
                string val = string.Empty;

                if (!value.ToString().Contains("."))
                {
                    val = string.Format("{0}{1}", value.ToString(), ".00");
                    value =Math.Round(Convert.ToDecimal(val), 2);
                }
                else
                    value = Math.Round(value, 2);
                (this as Detail).Length = (value.ToString().Trim() == 
                string.Empty) ? 0 : value;
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

val = string.Format("{0:0.00}", value);

答案 1 :(得分:0)

这与属性设置器无关。您需要在GUI中指定字符串格式以对数字进行舍入。

同样if (this is PersonalDetail)是一个巨大的设计缺陷。改为替换PersonalDetail类中的Length属性。 (不确定这个属性的目的是什么)

答案 2 :(得分:0)

问题是45m和45.00m是相同的,因为这是一个小数,它将始终显示“45”而不是“45.00”,除非你每次尝试输出它时都使用字符串格式化。< / p>

您可以随时创建另一个输出所需内容的属性,例如:

public decimal Length { get; set; }

public string FormattedLength
{
    get
    {
        return String.Format("{0:0.00}", this.Length);
    }
}

另一方面,我不喜欢这样,但我相信它会让你或多或少地得到你想要的东西。