Merge pull request #1843 from SiboVG/issue-1842
[#1842] More general string conversion to double for fin editor table
This commit is contained in:
commit
ab50573f71
@ -18,6 +18,7 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
|
||||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||||
|
import net.sf.openrocket.util.StringUtil;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -670,8 +671,8 @@ public class UnitGroup {
|
|||||||
if (!matcher.matches()) {
|
if (!matcher.matches()) {
|
||||||
throw new NumberFormatException("string did not match required pattern");
|
throw new NumberFormatException("string did not match required pattern");
|
||||||
}
|
}
|
||||||
|
|
||||||
double value = Double.parseDouble(matcher.group(1));
|
double value = StringUtil.convertToDouble(matcher.group(1));
|
||||||
String unit = matcher.group(2).trim();
|
String unit = matcher.group(2).trim();
|
||||||
|
|
||||||
if (unit.equals("")) {
|
if (unit.equals("")) {
|
||||||
|
@ -19,5 +19,24 @@ public class StringUtil {
|
|||||||
}
|
}
|
||||||
return "".equals(s.trim());
|
return "".equals(s.trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a string to a double, but with a more robust locale handling.
|
||||||
|
* Some systems use a comma as a decimal separator, some a dot. This method
|
||||||
|
* should work for both cases
|
||||||
|
* @param input string to convert
|
||||||
|
* @return double converted from string
|
||||||
|
* @throws NumberFormatException if the string cannot be parsed.
|
||||||
|
*/
|
||||||
|
public static double convertToDouble(String input) {
|
||||||
|
input = input.replace(',', '.');
|
||||||
|
int decimalSeparator = input.lastIndexOf('.');
|
||||||
|
|
||||||
|
if (decimalSeparator > -1) {
|
||||||
|
input = input.substring(0, decimalSeparator).replace(".", "") + input.substring(decimalSeparator);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Double.parseDouble(input);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class that tests
|
* A class that tests
|
||||||
@ -22,4 +23,25 @@ public class StringUtilTest {
|
|||||||
assertFalse(StringUtil.isEmpty("A"));
|
assertFalse(StringUtil.isEmpty("A"));
|
||||||
assertFalse(StringUtil.isEmpty(" . "));
|
assertFalse(StringUtil.isEmpty(" . "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConvertToDouble() {
|
||||||
|
assertEquals(0.2, StringUtil.convertToDouble(".2"), MathUtil.EPSILON);
|
||||||
|
assertEquals(0.2, StringUtil.convertToDouble(",2"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1, StringUtil.convertToDouble("1,"), MathUtil.EPSILON);
|
||||||
|
assertEquals(2, StringUtil.convertToDouble("2."), MathUtil.EPSILON);
|
||||||
|
assertEquals(1, StringUtil.convertToDouble("1"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1.52, StringUtil.convertToDouble("1.52"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1.52, StringUtil.convertToDouble("1,52"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1.5, StringUtil.convertToDouble("1.500"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1.5, StringUtil.convertToDouble("1,500"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500.61, StringUtil.convertToDouble("1.500,61"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500.61, StringUtil.convertToDouble("1,500.61"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500.2, StringUtil.convertToDouble("1,500,200"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500.2, StringUtil.convertToDouble("1.500.200"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500200.23, StringUtil.convertToDouble("1500200.23"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500200.23, StringUtil.convertToDouble("1500200,23"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500200.23, StringUtil.convertToDouble("1,500,200.23"), MathUtil.EPSILON);
|
||||||
|
assertEquals(1500200.23, StringUtil.convertToDouble("1.500.200,23"), MathUtil.EPSILON);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user