Practical Numeric Techniques
Handling Numeric Precision
import java.text.DecimalFormat;
public class PrecisionDemo {
public static void main(String[] args) {
double value = 123.456789;
DecimalFormat df = new DecimalFormat("#.##");
String formatted = df.format(value);
System.out.println(formatted); // Outputs: 123.46
}
}
Safe Numeric Calculations
Avoiding Overflow
graph TD
A[Numeric Safety] --> B[Check Range]
A --> C[Use BigInteger]
A --> D[Validate Input]
Range Checking Example
public class SafeCalculationDemo {
public static int safeAdd(int a, int b) {
// Check for potential overflow
if (a > Integer.MAX_VALUE - b) {
throw new ArithmeticException("Integer overflow");
}
return a + b;
}
}
Advanced Numeric Techniques
BigDecimal for Precise Calculations
Operation |
Primitive |
BigDecimal |
Precision |
Limited |
Exact |
Rounding |
Imprecise |
Configurable |
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal result = a.add(b);
// Precise rounding
BigDecimal rounded = result.setScale(2, RoundingMode.HALF_UP);
System.out.println(rounded); // 0.30
}
}
Numeric Validation Techniques
public class NumericValidationDemo {
public static boolean isValidNumber(String input) {
try {
Double.parseDouble(input);
return true;
} catch (NumberFormatException e) {
return false;
}
}
public static void main(String[] args) {
String validInput = "123.45";
String invalidInput = "abc";
System.out.println(isValidNumber(validInput)); // true
System.out.println(isValidNumber(invalidInput)); // false
}
}
Numeric Caching Techniques
public class NumericCacheDemo {
// Cache frequently used numeric values
private static final int[] COMMON_INTEGERS = new int[100];
static {
for (int i = 0; i < COMMON_INTEGERS.length; i++) {
COMMON_INTEGERS[i] = i;
}
}
public static int getCachedInteger(int value) {
return (value >= 0 && value < COMMON_INTEGERS.length)
? COMMON_INTEGERS[value]
: value;
}
}
LabEx Numeric Best Practices
- Use appropriate numeric types
- Implement robust error handling
- Consider memory and performance implications
- Validate numeric inputs thoroughly
Advanced Numeric Patterns
Factory Method for Numeric Conversion
public class NumericConverter {
public static Number convertToNumber(String input) {
try {
// Intelligent type conversion
if (input.contains(".")) {
return Double.parseDouble(input);
} else {
return Long.parseLong(input);
}
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid numeric input");
}
}
}
Key Takeaways
- Always validate numeric inputs
- Use appropriate precision techniques
- Understand the limitations of primitive types
- Leverage Java's numeric utility classes