2013-08-23 2 views
0

안녕하세요, 저는 BMI라는 내 모델에서 속성을 가지고 있지만 기본적으로 CalculateBMI라는 메서드에서 계산 된 숫자를 반환하는 논리입니다. 그러나이 메서드에서 반환 지점에 중단 점을 넣을 때도 항상 0을 반환합니다. 무게와 높이가 숫자를 포함하지만 _bmi 아무것도에게mvc 4 모델, 항상 0을 반환하는 메소드?

BMI 재산권 할당되지 없구요 :

private int _bmi; 
     [DisplayName("BMI")] 
     public int BMI 
     { 
      get {return _bmi;} 
      set 
      { 
       _bmi = value; 
       _bmi = CalculateBMI(); 

      } 
     } 

CalculateBMI 방법 :

public int CalculateBMI() 
     { 

      _bmi = Weight/(Height * Height); 
      return _bmi; 
     } 
+2

이상한 코드가 많이 있습니다. 왜'_bmi = value'을 설정하고, 다시 'CalculateBMI()'로 설정 한 다음 실제 메소드 내에서 다시 설정합니까? 나는 당신이 단지 이것을 원한다고 생각한다 :'_bmi = CalculateBMI()'그리고 당신의 메소드'return Weight/(Height * Height)' – tnw

+0

세터에서 왜'_bmi'를 제공된 값으로 설정하고 즉시 설정해야합니까? 다른 것? – asymptoticFault

+0

BMI가 설정된 '값'으로 실제로 무엇인가를하고있는 것처럼 보이지 않습니다. 방금 버리세요. 왜 당신은 BMI 속성의 설정자 내에서 BMI를 계산해야합니까? 그것은 아무 의미가 없습니다. 당신은 BMI 값으로 시작해야하는'value'를 취한 다음 방금 준 BMI로 BMI를 계산합니까? 뭐!? – tnw

답변

2

그래서 나는 우리가 모든 의견에 알입니다 무슨 말을하는지 생각을 당신이 필요로하는 난이있다 :

public double BMI { get { return Weight/(Height * Height); } } 

@ataravati는 또한 속성 이름과 동일하기 때문에 DisplayName 속성이 불필요한 것에 대해 올바른 것입니다.

또한 결과는 부동 소수점 값이어야하므로 유형을 double으로 변경해야합니다. 또한 WeightHeight 속성이 double이기 때문에 정수 나누기에서 0이 나오지 않도록해야합니다.

0

재산은 아무 것도 설정하지 않으므로 이와 같아야합니다. 그것은 즉석에서 계산하고, 당신은 단지 그것에 대한 읽기 전용 액세스해야 할 것 : 표시 이름은 속성 이름과 동일 할 때

public int BMI 
{ 
    get 
    { 
     return CalculateBMI(); 
    } 
} 

그런데를, 당신은 DisplayName 특성이 필요하지 않습니다.

+0

끔찍한 코드에 사과 하긴하지만 위 코드로 변경하면 여전히 0이 반환됩니까? – CodeSurfer

1

다른 응답에서 지적한 몇 가지 문제가있어 보지 않았다면 값을 확인해야합니다. 하여 BMI 변수 타입 int

겠어요 - 같이,

분할 결과를 반올림
  • Weight = 0
  • 0 : 분할 결과

    제로는 행 수 있었다 .. 디버깅을 시도하고 실제 값을 사용하여 수학을하십시오. 결과가 0.5보다 작 으면 0으로 반올림됩니다.

    시도하려면 BMI 유형을 Decimal 또는 Double으로 변경할 수 있습니다.

관련 문제