From ddc35f6629de2b1363b0d947b4a115344be4c0d1 Mon Sep 17 00:00:00 2001 From: Randy Morgan Date: Fri, 7 Sep 2012 09:35:46 +0900 Subject: properly recognize exponential values as float --- .gitignore | 2 ++ README.md | 2 ++ lib/axlsx/workbook/worksheet/cell.rb | 2 +- test/workbook/worksheet/tc_cell.rb | 3 ++- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4e1c6c55..684909fd 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ example.csv *.*~ .DS_Store tmp +*.pem +*.pfx diff --git a/README.md b/README.md index e2fc582e..4e54d0cf 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,8 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem, #Change log --------- - **September.??.12**: 1.2.3 + - fix exponential float/bigdecimal values rendering as strings intead + of 'numbers' in excel. - added support for :none option on chart axis labels - added support for paper_size option on worksheet.page_setup - **August.27.12**: 1.2.2 diff --git a/lib/axlsx/workbook/worksheet/cell.rb b/lib/axlsx/workbook/worksheet/cell.rb index 7e0d7916..2846225f 100644 --- a/lib/axlsx/workbook/worksheet/cell.rb +++ b/lib/axlsx/workbook/worksheet/cell.rb @@ -380,7 +380,7 @@ module Axlsx :boolean elsif v.to_s.match(/\A[+-]?\d+?\Z/) #numeric :integer - elsif v.to_s.match(/\A[+-]?\d+\.\d+?\Z/) #float + elsif v.to_s.match(/\A[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\Z/) #float :float else :string diff --git a/test/workbook/worksheet/tc_cell.rb b/test/workbook/worksheet/tc_cell.rb index 9f425ec7..555fcff7 100644 --- a/test/workbook/worksheet/tc_cell.rb +++ b/test/workbook/worksheet/tc_cell.rb @@ -60,7 +60,7 @@ class TestCell < Test::Unit::TestCase assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array } assert_nothing_raised("type can be changed") { @c.type = :string } assert_equal(@c.value, "1.0", "changing type casts the value") - + assert_equal(:float, @row.add_cell(1.0/10**7).type, 'properly identify exponential floats as float type') assert_equal(@row.add_cell(Time.now).type, :time, 'time should be time') assert_equal(@row.add_cell(Date.today).type, :date, 'date should be date') assert_equal(@row.add_cell(true).type, :boolean, 'boolean should be boolean') @@ -88,6 +88,7 @@ class TestCell < Test::Unit::TestCase assert_equal(@c.send(:cell_type_from_value, -1), :integer) assert_equal(@c.send(:cell_type_from_value, true), :boolean) assert_equal(@c.send(:cell_type_from_value, false), :boolean) + assert_equal(@c.send(:cell_type_from_value, 1.0/10**6), :float) end def test_cast_value -- cgit v1.2.3