JAVA.BIGDEC.FLOAT
Do not construct BigDecimal objects from floating-point literals
Vulnerability and risk
Floating-point values may not represent decimals precisely and lead to unexpected outcomes when provided to BigDecimal() as a decimal literal.
Mitigation and prevention
Do not parse floats into BigDecimal, use strings or ints/longs. Provide floating-point decimal literal values to as a string.
Vulnerable code example 1
Copy
                                                        
                                                    
                                                package com.klocwork;
import java.math.BigDecimal;
public class JAVA_BIGDEC_FLOAT_POSITIVE_1 {
    public static void test(String args[]) {
        System.out.println(new BigDecimal(0.1));
    }
}Vulnerable code example 2
Copy
                                                        
                                                    
                                                package com.klocwork;
import java.math.BigDecimal;
public class JAVA_BIGDEC_FLOAT_POSITIVE_2 {
    public static void test(String args[]) {
        System.out.println(new BigDecimal(7.321E-3));
    }
}Vulnerable code example 3
Copy
                                                        
                                                    
                                                package com.klocwork;
import java.math.BigDecimal;
public class JAVA_BIGDEC_FLOAT_POSITIVE_3 {
    public static void test(String args[]) {
        System.out.println(new BigDecimal(2f));
    }
}Fixed code example
Copy
                                                    
                                                
                                            package com.klocwork;
import java.math.BigDecimal;
public class JAVA_BIGDEC_FLOAT_NEGATIVE {
    public static void test(String args[]) {
        System.out.println(new BigDecimal(0));
    }
}