2017-08-30 8 views
0

小数点以下桁数を宣言したユーザーにPIの値を表示する簡単な操作をしようとしています。たとえば、ユーザーが2を入力すると、PIは3.14を出力します。しかし、私はArgumentsOutOfBoundsエラーが発生し続ける。誰かが私が間違っていることを私に説明することはできますか?あなたが直接Console.Read()を使用して読んだときCに小数点以下桁数を設定する

class PiToDecimalPlaces{ 
    public static void Main(){ 
     int decimalPlaces = (int)Console.Read(); 
     Console.WriteLine(Round(decimalPlaces)); 
    } 
    public static double Round(int places){ 
     double piToPlaces = Math.Round(Math.PI, places); 
     return piToPlaces; 
    } 
} 
+0

を避けるべきですか? – Pac0

+4

文字コードを 'int'にキャストする代わりに' Console.ReadLine'と 'int.TryParse'を呼び出してください。 –

+0

@ Pac0申し訳ありませんが、これはdoubleです。piToPlaces = Math.Round(Math.PI、places); – Robert

答えて

2

いくつかのもの。

まず、以下の行は論理的に正しくありません。あなたがするので、固定小数点精度をしたい時にあなたの機能は本当にdecimalなくdoubleを使用する必要があります読んで返される出力が必要なものint変数

char
int decimalPlaces = (int)Console.Read(); 

int decimalPlaces = int.Parse(Console.ReadLine()); 

セカンドですdoubleは浮動小数点精度値です

public static decimal Round(int places){ 
    decimal piToPlaces = Math.Round((decimal)Math.PI, places); 
    return piToPlaces; 
} 

あなたの例外を修正しても、正確に、あなたの例外を与えているラインの潜在的な浮動小数点精度の問題

0

、あなたはdecimalPlacesへの入力のASCII値を読んでいます。

2を入力した場合、decimalPlacesの値は50になります。

入力にはConsole.ReadLine()を使用し、int.TryParse()を入力してRound()メソッドに渡します。

string strNum = Console.ReadLine(); 
int decimalPlaces; 
int.TryParse(strNum, out decimalPlaces); 
Console.WriteLine(Round(decimalPlaces)); 
+0

申し訳ありませんが、私の返信に間違いがあり編集されました。 – Sach

0

あなたがにコンソールから値を読んでいる行を変更してください、

int decimalPlaces = Convert.ToInt32(Console.ReadLine()); 
関連する問題