Defect #12510

Issues PDF export: Spent time/Float-values aren't rounded to 2 digits

Added by Luboš Schrámek about 5 years ago. Updated 1 day ago.

Status:ClosedStart date:
Priority:NormalDue date:
Assignee:Go MAEDA% Done:

0%

Category:PDF export
Target version:4.0.0
Resolution:Fixed Affected version:2.6.0

Description

Hello,

How to simulate problem?
  • add Spent time column to issues
  • modify Spent time in some issue to 2.45
  • export table to PDF

There will be a columns Spent time with 2.45000004768372. I hope there are missing some number format func(), can you please fix this problem? I am making these exports for customers and it looks bad.

Thanks.

export.pdf - error in pdf (311 KB) fangzheng (方正), 2012-12-07 07:07

pdf.patch Magnifier - get pretty float values for spent time and estimated time (436 Bytes) Filou Centrinov, 2013-02-12 01:44

pdf.rb.patch Magnifier (531 Bytes) Filou Centrinov, 2013-03-06 12:36

web-edit.png (4.52 KB) Toshi MARUYAMA, 2013-08-05 12:06

0001-Round-floats-to-2-digits-when-rendering-an-issue-lis.patch Magnifier (739 Bytes) Holger Just, 2014-10-29 15:34

before.png (79.7 KB) Marius BALTEANU, 2017-11-27 01:46

after.png (63.8 KB) Marius BALTEANU, 2017-11-27 01:46

0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17055.patch Magnifier (2.21 KB) Marius BALTEANU, 2017-12-06 14:31


Related issues

Related to Redmine - Defect #13780: Spent hours have excessive flaction in PDF exported ticke... Closed

Associated revisions

Revision 17059
Added by Go MAEDA 12 days ago

Fix: Round floats to 2 digits when rendering an issue list to PDF (#12510).

Patch by Holger Just and Marius BALTEANU.

Revision 17063
Added by Toshi MARUYAMA 11 days ago

svn propset svn:eol-style native test/unit/lib/redmine/export/pdf/issues_pdf_test.rb (#12510)

Revision 17065
Added by Toshi MARUYAMA 11 days ago

code clean up IssuesPdfHelperTest (#12510)

  • remove extra empty lines
  • remove trailing white space
  • replace tab to two spaces

Revision 17077
Added by Toshi MARUYAMA 11 days ago

add copyright header to test/unit/lib/redmine/helpers/url_test.rb (#12510)

History

#1 Updated by fangzheng (方正) about 5 years ago

Mark. Waiting for solution.
BTW, this issue doesn't occur on CSV.

#2 Updated by Filou Centrinov almost 5 years ago

I'm seeing the same problem in Redmine 2.2.1.
In my Database the spent time values is for example 0.1, but the pdf export displays 0.100000001490116.

#3 Updated by Daniel Felix almost 5 years ago

Maybe this relates to the float_max like #12680?

#4 Updated by Daniel Felix almost 5 years ago

  • Priority changed from High to Normal

#5 Updated by Filou Centrinov almost 5 years ago

Daniel Felix wrote:

Maybe this relates to the float_max like #12680?

Yes, obviously both bugs (this ticket and #12680) have the same causation (floating point error):

UPDATE: No. It does not relate to #12680.

#6 Updated by Filou Centrinov almost 5 years ago

To get pretty float values for spent time and estimated time I created this patch: /lib/redmine/export/ pdf.patch

If the value is empty or zero the pdf cell keeps empty, so you get a better overview on spent and estimated hours.

Could you merge this to redmine?

#7 Updated by Filou Centrinov almost 5 years ago

Please, could you fix this with redmine 2.3?

#8 Updated by Daniel Felix almost 5 years ago

Filou Centrinov wrote:

UPDATE: No. It does not relate to #12680.

Why not? It seems for me to be again some floating point error, which we've encounter many times in different systems.

#9 Updated by Filou Centrinov almost 5 years ago

Daniel Felix wrote:

Why not? It seems for me to be again some floating point error, which we've encounter many times in different systems.

The difference is: In #12680 the number is too big, so the floating precision can not be provided. In this issue we are within the floating precision, so the correct presentation should be provided.

The problem is internal caused by displaying a value with a higher precision then the value originaly had. So 0.1 becomes 0.100000001490116, because the type of variable had a precision of 32bit that allows only 8 positions after decimal point. Therefore this problem can easly fixed by: "%.2f" % value
See: pdf.rb.patch

#10 Updated by Filou Centrinov almost 5 years ago

In /lib/redmine/i18n.rb is a function called l_hours to format hours into a value+label string. If this function would'nt be used in /app/view/issues/show.html.erb you get the same effect of displayed spent time.

So l_hours fixes the same "bug", but with an additional label.

#11 Updated by Filou Centrinov almost 5 years ago

#12 Updated by Filou Centrinov over 4 years ago

Please fix this. It's a small fix. ... or make it to a candidate.

#13 Updated by Etienne Massip over 4 years ago

  • Status changed from New to Confirmed
  • Target version set to Candidate for next minor release

I can confirm the defect although I'm not fond of the patch, is it possible to fix every single float value display at once rather than specific attributes?

Edit: confirmed with MRI 1.9.3

#14 Updated by David Lukas Müller over 4 years ago

+1
For the particular issue I've observed that on Redmine 2.3.1 I had the following time entries:
  • 3.50h
  • 1.25h
  • 0.30h (I think I've entered "0:20")
And that is what I see:
  • 5.05 with Web User Interface (HTML) --> good
  • 5.050000011920929 with PDF-Export --> chould be improved
  • "spent_hours":5.050000011920929 with REST API (JSON) using http://myhost/redmine/issues/1234.json --> chould be improved

#15 Updated by Toshi MARUYAMA over 4 years ago

David Lukas Müller wrote:

  • 5.05 with Web User Interface (HTML) --> good

Web edit form has same problem.

#16 Updated by Toshi MARUYAMA over 4 years ago

You can see by following change.

diff --git a/app/views/issues/_attributes.html.erb b/app/views/issues/_attributes.html.erb
--- a/app/views/issues/_attributes.html.erb
+++ b/app/views/issues/_attributes.html.erb
@@ -63,7 +63,7 @@
 <% end %>

 <% if @issue.safe_attribute? 'estimated_hours' %>
-<p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p>
+<p><%= f.text_field :estimated_hours, :size => 6, :disabled => !@issue.leaf?, :required => @issue.required_attribute?('estimated_hours') %> <%= l(:field_hours) %></p>
 <% end %>

 <% if @issue.safe_attribute?('done_ratio') && @issue.leaf? && Issue.use_field_for_done_ratio? %>

#17 Updated by Holger Just about 3 years ago

The attached patch (which was extracted from Planio) fixes this issue for all float values in table cells. This patch thus addresses the concerns of Etienne above.

The patch works agains current trunk but should apply similarly to earlier versions. The used method is the one used in the QueriesHelper#column_value method and thus should produce results similar to it.

#18 Updated by Jan from Planio www.plan.io about 3 years ago

  • Assignee set to Jean-Baptiste Barth

In case you were still looking for easy fixes :)

#19 Updated by Jean-Baptiste Barth about 3 years ago

  • Affected version changed from 2.1.2 to 2.6.0

I do :) First I'll try to add some tests to this part of the code but no pb I'll merge it after.

#20 Updated by Olivier Houdas 12 months ago

Tested on 3.3.1, still occurs.

#21 Updated by S. Ruttloff about 1 month ago

Problem still exists in Redmine 3.3.2, but could fix it here:
/lib/redmine/export/pdf/issues_pdf_helper.rb

Search for

if value.is_a?(Date)
    format_date(value)
elsif value.is_a?(Time)
    format_time(value)
else
    value
end

and replace by

if value.is_a?(Date)
    format_date(value)
elsif value.is_a?(Time)
    format_time(value)
elsif value.is_a?(Float)
    sprintf "%.2f", value
else
    value
end

#22 Updated by Marius BALTEANU 21 days ago

  • File 0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17037.patch added
  • File before.png added
  • File after.png added
  • Assignee deleted (Jean-Baptiste Barth)

Tested on current trunk (r17037) and the issue still occurs.

I've updated the patch from Holger Just to apply cleanly. I think that we can fix this issue in the next release.

Before:

After:

#23 Updated by Mischa The Evil 13 days ago

We might want some test coverage added if there isn't any yet, as Jean-Baptiste already suggested.

#24 Updated by Marius BALTEANU 13 days ago

  • File deleted (0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17037.patch)

#25 Updated by Marius BALTEANU 13 days ago

  • File 0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17055.patch added

Mischa The Evil wrote:

We might want some test coverage added if there isn't any yet, as Jean-Baptiste already suggested.

Attached an updated patch that contains the fix and a test strictly for this scenario. On top of this patch, we can add more tests in the future to improve the coverage.

#26 Updated by Mischa The Evil 12 days ago

  • Subject changed from Issues PDF export - Spent time to Issues PDF export: Spent time/Float-values aren't rounded to 2 digits.
  • Target version changed from Candidate for next minor release to 4.1.0

Thanks Holger and Marius.

#27 Updated by Marius BALTEANU 12 days ago

  • File deleted (0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17055.patch)

#28 Updated by Marius BALTEANU 12 days ago

  • File 0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17055.patch added

I had a typo in my previous patch.

Maybe we can deliver this fix earlier than Redmine 4.

#29 Updated by Go MAEDA 12 days ago

Marius, thank you for adding a test. But I encountered the following error. Could you look into it?

$ ruby test/unit/lib/redmine/export/pdf/issues_pdf_test.rb
Run options: --seed 32491

# Running:

F

Failure:
IssuesPdfHelperTest#test_fetch_row_values_should_round_float_values [test/unit/lib/redmine/export/pdf/issues_pdf_test.rb:32]:
--- expected
+++ actual
@@ -1 +1 @@
-["2", "Add ingredients categories", "4.34"]
+["2", "Add ingredients categories", "0.00"]

bin/rails test test/unit/lib/redmine/export/pdf/issues_pdf_test.rb:23

Finished in 0.658523s, 1.5185 runs/s, 1.5185 assertions/s.
1 runs, 1 assertions, 1 failures, 0 errors, 0 skips

#30 Updated by Marius BALTEANU 12 days ago

  • File deleted (0001-Round-floats-to-2-digits-when-rendering-an-issue-lis_r17055.patch)

#32 Updated by Go MAEDA 12 days ago

  • Status changed from Confirmed to Closed
  • Assignee set to Go MAEDA
  • Target version changed from 4.1.0 to 4.0.0
  • Resolution set to Fixed

Committed in the trunk (r17059). Thank you.

#33 Updated by Toshi MARUYAMA 1 day ago

  • Subject changed from Issues PDF export: Spent time/Float-values aren't rounded to 2 digits. to Issues PDF export: Spent time/Float-values aren't rounded to 2 digits

Also available in: Atom PDF