2017-04-12 5 views
-3
private decimal? xposition; 
public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 
    set 
    { 
     this.xposition = value; 
     Math.Round(this.xposition, 4); 
    } 
} 

setメソッドでMath.roundを使用できないのはなぜですか?それは言う:setメソッドでMath.roundを使用できない理由#

引数 '#1'は '10進数'を変換できません。 double型を入力する式

+1

適切なコードをインラインで貼り付けてください。 – Bathsheba

+0

プライベート小数? xposition; –

+0

プライベート小数? xposition; \t \t public decimal? XPosition \t \t { \t \t \t \t \t \t { \t \t \t \t戻りthis.xpositionを取得します。 \t \t \t} \t \t \t \t \t \t {\t \t \t \t \t \t \t \t this.xposition =値を設定します。 \t \t \t \t Math.Round(this.xposition、4); \t \t \t \t} \t \t \t \t} –

答えて

3

Math.Roundは、小数点以下の桁数には対応していません。代わりにMath.Round(xposition.Value, 4)を使用してください。また、この値は有用になるように割り当てる必要があります。

private decimal? xposition; 
public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 
    set 
    { 
     this.xposition = value.HasValue ? Math.Round(value.Value, 4) : null; 
    } 
} 
+0

セッターに余分なセミコロンがあります。 – vyrp

+0

これは@vyrpには問題ありません。 nullをチェックしていない。 –

+0

はい、わかっています。他の答えはより正確です。私はちょうど二重セミコロンをきれいにしたいと思った。しかし、それは6文字未満の変更だったので私は編集することはできません。 – vyrp

0

コードにはいくつかの問題があります。

  • 最初に、null許容decimal.Valueを使用する必要があります。
  • 第2に、使用する前に値がnullであることを確認する必要があります。
  • 第3に、結果を割り当てる必要があります。

私はこのコードを使用します。

private decimal? xposition; 
public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 
    set 
    { 
     if (value != null) 
     { 
      this.xposition = Math.Round(value.Value, 4); 
     } 
     else 
     { 
      this.xposition = value; 
     } 
    } 
} 
2

Math.Roundは、丸い値を返し、それが渡された値を変更しません。だから、バッキングフィールドxpositionに戻り値を代入する必要があります。

xposition = Math.Round(value, 4); 

しかし、それはあなたがそれがヌル可能な場合を扱うために持っていて、Math.Roundの小数点にキャストする必要がNULL可能だから:

public decimal? XPosition 
{ 
    get 
    { 
     return this.xposition; 
    } 

    set 
    { 
     this.xposition = value == null ? (decimal?)null : Math.Round(value.Value, 4); 
    } 
} 
関連する問題