java - 你能用 Java 复制 Excel 中的 Floor 函数吗?

标签 java excel math bigdecimal rounding

我已经在互联网上搜索过,但没有找到任何解决我的问题的方法。

我希望能够在 Java 中使用与 Excel 中相同/复制的 FLOOR 函数类型。特别是,我希望能够提供一个值( double 或最好是 BigDecimal)并向下舍入到我提供的最接近的倍数。

Examples 1:
Value = 24,519.30235
Significance = 0.01
Returned Value = 24,519.30

Example 2:
Value = 76.81485697
Significance = 1
Returned Value = 76

Example 3:
Value = 12,457,854
Significance = 100
Returned Value = 12,457,800

我对 java 很陌生,想知道是否有人知道 API 是否已经包含该函数,或者他们是否愿意为我提供上述问题的解决方案。我知道 BigDecimal 但我可能错过了正确的函数。

非常感谢

最佳答案

是的,你可以。

假设给定的数字是

76.21445 和

0.01

你可以做的就是将 76.21445 乘以 100(或除以 0.01) 将结果舍入为最接近或较小的整数(取决于您想要的整数)

然后再次乘以该数字。

请注意,如果您不选择小数精度的数字,它可能无法准确打印您想要的内容。 (二进制格式的数字的扩展不是有限的问题)。另外,在数学中,您可以使用舍入函数来完成您想要的几乎所有操作。

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html 你这样使用它

round(200.3456, 2);

一个示例代码可以是

public static void main(String[] args) {
    BigDecimal value = new BigDecimal("2.0");
    BigDecimal significance = new BigDecimal("0.5");
    for (int i = 1; i <= 10; i++) {
        System.out.println(value + " --> " + floor(value, significance));
        value = value.add(new BigDecimal("0.1"));
    }
}

private static double floor(BigDecimal value, BigDecimal significance) {
    double result = 0;
    if (value != null) {
        result = value.divide(significance).doubleValue();
        result = Math.floor(result) * significance.doubleValue();
    }
    return result;
}

关于java - 你能用 Java 复制 Excel 中的 Floor 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304770/

相关文章:

math - Prims 算法总运行时间!

java - setLocation 的 Geofire 错误

java - 相当于套接字连接的 SerialPortEvent

c++ - OLE bstr 不以 null 终止?

Php split/chunk Excel with Maatwebsite Laravel-Excel v.3

c++ - 如何将 double 转换为整数

algorithm - 从边缘找到内部几何

java - 在 java 中,我想做 102%100 并将余数作为 02 而不是 2..我该怎么做?

java - Proguard keepclassmembers 保持类(class)

java - APACHE POI 设置单元格样式清除现有日期格式