2011-09-16 617 views
0

以下是我的属性,如果我们输入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; 
      } 
     } 
    } 
+5

为什么你的财产检查这是什么?似乎你在抽象层面有更广泛的问题。 –

+0

这是在数据层和它的WinForms文本框绑定原始属性从实体框架来。 –

回答

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

它的功能就像转换小数点一样。.0 –

+0

@DOTNETBEE - 长度属性的目标是什么?你想要整个数字长度,小数点长度还是整个长度?例如,如果您将“长度”设置为35.12632,那么当您尝试“获取”“长度”时,您希望该值为多少? – SwDevMan81

0

这有什么好做的属性setter。您需要在您的GUI中指定字符串格式以四舍五入数字。

另外if (this is PersonalDetail)是一个巨大的设计缺陷。相反,重写PersonalDetail类中的Length属性。 (不知道这个属性意图是什么)

+0

属性的实体Framewok类被扩展为包含作为子引用的PersonalDetail的部分类,因此它是PersonalDetail。 –

+0

属性的实体Framewok类被扩展为部分类?子参考?不太明白 – Bas

+0

设计师是别人谁离开我只是修复错误不知道我也与设计混淆... –

0

问题是,45米和45.00米是相同的东西,因为这是一个小数,它将始终显示“45”,而不是“45.00”,除非你使用一个字符串格式化程序,每次你尝试输出它。

你总是可以做出你想要做什么输出,如其他属性:

public decimal Length { get; set; } 

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

在一个侧面说明,我不喜欢这样,但我相信它可以让你或多或少你是什么寻找。

+0

不是不正确的,因为这是所有有限的文本框它出现在文本框为45.00如果我们输入45,但在保存的时候,当我浏览代码时,我发现它又变成了45。 –

+1

那是因为直接检查Decimal时你永远不会看到45.00。十进制虽然精确,但并未记录有多少数字是重要的,并将45m,45.0m和45.00m视为相等,并始终显示为最简单的形式(而十进制)。 – mynameiscoffey