matlab
  • decimal
  • percentage
  • 2016-05-19 2 views 1 likes 
    1

    精度のパーセンテージを計算したいと思います。私は以下のコードを持っています。しかし、このような予期せぬ出力を与える "精度は2.843137e + 01x37です"。 期待されるものの、結果はそれを修正する方法「精度は28.43パーセントである」Matlabのパーセンテージを計算してください

    y %Amount of correct data 
    j %Amount of all data 
    a = 'The accuracy is %dx%d.'; 
    percent = '%.0f%%'; 
    format short 
    acc = 100 * double(y/j); 
    sprintf (a,acc) 
    

    のですか?

    ご協力いただければ幸いです。 ありがとうございます。あなたはほとんどあなたが期待されるものを持っている

    +0

    'y'、' j'は何です何と彼らのタイプは何ですか?おそらく、分割の前に二重に明示的にキャストしたいと思うでしょう。 – Bernhard

    +0

    ところで、2.843e + 01 == 28.43? – Bernhard

    答えて

    1

    、ちょうど右の方法でそれを一緒に置きます。

    28.43%の正しい書式指定子は%.2f%%です。これは小数点の後に2桁を与え、最後に%-signを追加します。変数percentに定義されているものがありますが、.0は、期待される結果で書いたとおり、2桁の場合は.2でなければなりません。あなたがよく見れば、percentは決して使用されないことに気づくでしょう。

    結論に至りましょう。書式指定子を次のように変更します。

    a = 'The accuracy is %.2f%%'; 
    

    これですべての操作が完了です。 percentを定義する行は、後で何かを必要としない限り、format shortと同様に省略することができます。

    キャストに関して重要なこと:現在あなたが現在キャストしているものは何ですか? が必要な場合の場合は、の前に、それぞれyおよび/またはjのキャストを行います。おそらく、あなたのケースにキャストは必要ありません。


    yjのための前提と全体のコードは次のとおりです。

    y = 28.43137; %// Amount of correct data 
    j = 100;  %// Amount of all data 
    
    a = 'The accuracy is %.2f%%'; 
    acc = 100 * (y/j);     %// no cast 
    % acc = 100 * (double(y)/double(j)); %// with cast 
    sprintf(a,acc); 
    

    出力:

    ans = 
    The accuracy is 28.43% 
    
    +0

    明確な説明をありがとう。 これは機能します。 –

    +0

    @AnaAinよろしくお願いします。もうひとつ注意してください:私は、ダブルキャストは必要ないと仮定します。私は必要な場合*をキャストする正しい方法を示すために私の答えを広げた*。 – Matt

    1

    てみてください、

    a = 'The accuracy is %f.'; 
    acc = 100 * double(y/j); 
    sprintf (a,acc) 
    
    関連する問題