jay's blog
groovy处理浮点数
/*
 * 1. 浮点数
 *  - 不能加f,如果有f要去掉,要告诉前端约束
 *  - 构造时要加MathContext
 * 2. 整数
 *  - 直接new BigDecimal
 */
@Unroll("test#title")
def "testString"() {
    expect:
    def varMap = ["p": param]
    def script = "p == " + rs
    println(script)
    println("isInteger->" + rs.isInteger())
    println("isBigDecimal->" + rs.isBigDecimal())
    println("isBigInteger->" + rs.isBigInteger())
    println("isDouble->" + rs.isDouble())
    println("isFloat->" + rs.isFloat())
    println("isNumber->" + rs.isNumber())
    println("isLong->" + rs.isLong())
    def response = ruleEngine.execute(script, varMap)

    response == expectResponse

    where:
    title                   | param                                          | rs        | expectResponse
    "singleQuotationString" | "123"                                          | "'123'"   | true
    "doubleQuotationString" | "123"                                          | "\"123\"" | true
    "float"                 | 12.2F                                          | "12.2f"   | true
    "float1"                | 12f                                            | "12f"     | true
    "double"                | 12.2                                           | "12.2"    | true
    "double1"               | 12                                             | "12"      | true
    "boolean"               | true                                           | "true"    | true
    "int"                   | 12                                             | "12"      | true
    "long"                  | 2L                                             | "2"       | true
    "number1"               | new BigDecimal(112.01, MathContext.DECIMAL32)  | "112.01"  | true
    "number"                | new BigDecimal(112.01f, MathContext.DECIMAL32) | "112.01"  | true
    "number"                | new BigDecimal(112.01f, MathContext.DECIMAL32) | "112.01"  | true
    "number"                | new BigDecimal(112.02, MathContext.DECIMAL32)  | "112.02"  | true
    "number"                | new BigDecimal(112.00, MathContext.DECIMAL32)  | "112"     | true
    "number"                | new BigDecimal(112)                            | "112.0"   | true
    "number"                | new BigDecimal(112.0)                          | "112"     | true
    "number"                | new BigDecimal(112f)                           | "112"     | true
    "number"                | new BigDecimal(112, MathContext.DECIMAL32)     | "112"     | true
}

最后修改于 2021-11-22