2017-11-27 10 views
0

C#で数字の丸めに問題があります。ここに私のコードです:C#Math.Round Issue

public static double GetHighTargetHR (string birthdate, string examDate) 
{ 
    double HighTargetHR = 0; 
    double age; 
    double constant = 220; 

    age = CalculateAge(birthdate, examDate); 

    if (age > 0) 
    { 
    HighTargetHR = ((constant - age) * 0.8); 
    Math.Round(HighTargetHR, 0, MidpointRounding.AwayFromZero); 
    } 

    return HighTargetHR; 
} 

この患者の年齢は26であるので、220から26 = 194 * 0.8 = 155.20

私はコードがどんなに私は恐らくMath.roundに変更するもの155を返さないようにしたいです155.20を返します。どうすれば偶数に戻すことができますか?

+8

'Math.Round()'は、丸められた値を返します。あなたは戻り値を無視しています。 – CodeCaster

+1

Pac0とCodeCasterが言及したように、あなたは丸め呼び出しの結果を返さず、放棄するだけです。 –

+3

'Int'sは値の型です。それらは参照(参照型のような)によってメソッドに渡されないので、操作することはできません。したがって、このメソッドは値を返します。参照[c#の参照型と値型の違いは何ですか?](https://stackoverflow.com/questions/5057267/what-is-the-difference-between-a-reference-type-and-value- type-in​​-c) – Liam

答えて

2

Math.Roundの結果に変数に影響を与える必要があります。さもなければ、それは単に破棄されます。

HighTargetHR = Math.Round(HighTargetHR, ...); 
0

あなたが使用している機能(Math.Round)の結果を割り当てる必要があります:

HighTargetHR = Math.Round((constant - age) * 0.8, 0, MidpointRounding.AwayFromZero); 

関数は値を返します。だから、ある関数を使うときは、返された値を変数に代入する必要があります。

-1

ラウンド関数の戻り値の型を使用するための行方不明です。

HighTargetHR = Math.Round(HighTargetHR, 0, MidpointRounding.AwayFromZero);