プロジェクト

全般

プロフィール

QA #747

未完了

親チケットに表示する子チケットの進捗パーセンテージを小数点以下切り捨てで表示して欲しい

Shibasaki Rieko さんが6年以上前に追加. 6年以上前に更新.

ステータス:
回答済
優先度:
通常
担当者:
-
カテゴリ:
-
対象バージョン:
-
開始日:
2017/12/09
期日:
進捗率:

0%

予定工数:

説明

■現象/要望
 一つの親チケットに対して沢山の子チケットを登録している時に、子チケットが大方完了して
 全体の進捗率が99.5%になると、親チケットの進捗が100%と表示されて
 あたかも作業が全て終了したかの様に見えてしまいます。

 小数点以下を四捨五入で計算している様なのですが、切り捨ての方がありがたいです。
 対応方法はありますか。

奈良 裕記 さんが6年以上前に更新

残件あるのに100%と表示するのは誤認招きますね。(子チケットで200件超える場合ですが)

進捗率は親チケット自体にintで持っており(done_ratio 100%->100 )、
チケット編集保存に再計算されます。
下記箇所を変更すれば良いかと思います。(動作確認はしていません)

下記変更後に、親チケットを編集等で再計算させないと反映されません。

app/model/issue.rb

def recalculate_attributes_for(issue_id)
..
progress = done / (average * children.count)
p.done_ratio = progress.round

最後のround(四捨五入)を、floor(小さい方の整数へ変換)に変更

この変更により、進捗が0.5%以上1%未満の場合の表示が 1%→0%に変わりますが、
0.5%未満は従来から0ですし、問題は少ないでしょう。(数値が変わること以外)
これが問題になる場合には、progressの範囲により丸め処理を変更すれば良いこと。

奈良 裕記 さんが6年以上前に更新

見積時間を利用している場合、
浮動小数点演算が途中に入っているため、
算出した値が100になるべきところ、誤差で99.999999999 の様になる可能性があります。

この場合、roundで四捨五入していれば100%になりますが、floorで切り捨てすると99%になります。
(進捗率は%単位の整数値で保持している)

ということで

progress = done / (average * children.count)
p.done_ratio = (progress+0.000001).floor

の様に処理する方が良さそうです。

奈良 裕記 さんが6年以上前に更新

  • ステータス新規 から 回答済 に変更

本件、
p.done_ratio = progress.round → floor の修正で、4.0に取り込まれる予定です。
https://www.redmine.org/issues/27848

誤差でデグレードしないか心配ですが、、、、

他の形式にエクスポート: Atom PDF