summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxuri <xuri.me@gmail.com>2021-07-12 00:02:39 +0800
committerxuri <xuri.me@gmail.com>2021-07-12 00:02:39 +0800
commitf62c45fe0c111774fc69a31a42d5f3add10e5095 (patch)
tree1fc13047bcf4c8c410c90f029581a534c1b9c377
parentb14b74bf560f192f658d66fdbf719190f691bc5f (diff)
This closes #848 and closes #852, fix reading decimals precision
-rw-r--r--rows.go2
-rw-r--r--rows_test.go30
2 files changed, 17 insertions, 15 deletions
diff --git a/rows.go b/rows.go
index a40f4a9..fcd3c1a 100644
--- a/rows.go
+++ b/rows.go
@@ -378,7 +378,7 @@ func (c *xlsxC) getValueFrom(f *File, d *xlsxSST) (string, error) {
return f.formattedValue(c.S, c.V), nil
default:
isNum, precision := isNumeric(c.V)
- if isNum && precision > 15 {
+ if isNum && precision > 10 {
val, _ := roundPrecision(c.V)
if val != c.V {
return f.formattedValue(c.S, val), nil
diff --git a/rows_test.go b/rows_test.go
index 069b668..e07ecf1 100644
--- a/rows_test.go
+++ b/rows_test.go
@@ -851,22 +851,24 @@ func TestGetValueFromInlineStr(t *testing.T) {
}
func TestGetValueFromNumber(t *testing.T) {
- c := &xlsxC{T: "n", V: "2.2200000000000002"}
+ c := &xlsxC{T: "n"}
f := NewFile()
d := &xlsxSST{}
- val, err := c.getValueFrom(f, d)
- assert.NoError(t, err)
- assert.Equal(t, "2.22", val)
-
- c = &xlsxC{T: "n", V: "2.220000ddsf0000000002-r"}
- val, err = c.getValueFrom(f, d)
- assert.NoError(t, err)
- assert.Equal(t, "2.220000ddsf0000000002-r", val)
-
- c = &xlsxC{T: "n", V: "2.2."}
- val, err = c.getValueFrom(f, d)
- assert.NoError(t, err)
- assert.Equal(t, "2.2.", val)
+ for input, expected := range map[string]string{
+ "2.2.": "2.2.",
+ "1.1000000000000001": "1.1",
+ "2.2200000000000002": "2.22",
+ "28.552": "28.552",
+ "27.399000000000001": "27.399",
+ "26.245999999999999": "26.246",
+ "2422.3000000000002": "2422.3",
+ "2.220000ddsf0000000002-r": "2.220000ddsf0000000002-r",
+ } {
+ c.V = input
+ val, err := c.getValueFrom(f, d)
+ assert.NoError(t, err)
+ assert.Equal(t, expected, val)
+ }
}
func TestErrSheetNotExistError(t *testing.T) {