Skip to content

Commit 58bdcf5

Browse files
committed
avoid scientific notation when converting floats back to strings
1 parent 315bab9 commit 58bdcf5

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/main/java/com/gargoylesoftware/css/parser/LexicalUnitImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
package com.gargoylesoftware.css.parser;
1616

1717
import java.io.Serializable;
18+
import java.text.DecimalFormat;
19+
import java.text.DecimalFormatSymbols;
20+
import java.util.Locale;
1821

1922
/**
2023
* Implementation of {@link LexicalUnit}.
@@ -688,7 +691,11 @@ private String getTrimedFloatValue() {
688691
if (f - i == 0) {
689692
return Integer.toString((int) f);
690693
}
691-
return Float.toString(f);
694+
695+
final DecimalFormat decimalFormat = new DecimalFormat("0", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
696+
decimalFormat.setGroupingUsed(false);
697+
decimalFormat.setMaximumFractionDigits(4);
698+
return decimalFormat.format(f);
692699
}
693700

694701
/**

src/test/java/com/gargoylesoftware/css/parser/LexicalUnitImplTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,8 +386,30 @@ public void createNumberFromFloatPecision() throws Exception {
386386
Assert.assertNull(unit.getNextLexicalUnit());
387387
Assert.assertNull(unit.getPreviousLexicalUnit());
388388

389-
Assert.assertEquals("1.2345676", unit.toString());
390-
Assert.assertEquals("REAL(1.2345676)", ((LexicalUnitImpl) unit).toDebugString());
389+
Assert.assertEquals("1.2346", unit.toString());
390+
Assert.assertEquals("REAL(1.2346)", ((LexicalUnitImpl) unit).toDebugString());
391+
}
392+
393+
/**
394+
* @throws Exception if any error occurs
395+
*/
396+
@Test
397+
public void createNumberFromFloatPecisionWithoutExponent() throws Exception {
398+
final LexicalUnit unit = LexicalUnitImpl.createNumber(null, 0.0001f);
399+
400+
Assert.assertEquals(LexicalUnitType.REAL, unit.getLexicalUnitType());
401+
Assert.assertEquals(0.0001f, unit.getFloatValue(), 0.0001f);
402+
Assert.assertEquals(0, unit.getIntegerValue());
403+
Assert.assertEquals("", unit.getDimensionUnitText());
404+
Assert.assertNull(unit.getFunctionName());
405+
Assert.assertNull(unit.getParameters());
406+
Assert.assertNull(unit.getStringValue());
407+
408+
Assert.assertNull(unit.getNextLexicalUnit());
409+
Assert.assertNull(unit.getPreviousLexicalUnit());
410+
411+
Assert.assertEquals("0.0001", unit.toString());
412+
Assert.assertEquals("REAL(0.0001)", ((LexicalUnitImpl) unit).toDebugString());
391413
}
392414

393415
/**

0 commit comments

Comments
 (0)