java - Java 中仅将小数点四舍五入到最接近的十位,例如 1.17 到 1.20

标签 java math

如何舍入给定数字,例如 1.17 到 1.20,而不是 1.0 或 2.0。我试图打印从 4 英尺到 7 英尺的厘米、英尺和英寸列表。我已经得到了厘米和英尺部分,但英寸部分不符合预期。

这是我用来生成列表并记录结果的函数

private void print() {
        final float oneInch = 2.54f;
        final float oneFt = 30.48f;
        final float end = oneInch * 12 * 7;
        float start = oneInch * 12 * 4;
        int cm;
        int ft;
        float in;
        StringBuilder sb = new StringBuilder();
        DecimalFormat decimalFormat = new DecimalFormat("#.##");
        decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
        while (start <= end) {
            if (sb.length() > 0) {
                sb.replace(0, sb.length(), "");
            }

            cm = (int) start;
            sb.append(cm);
            sb.append(" cm, ");

            ft = (int) (start / oneFt);
            in = Float.valueOf(decimalFormat.format(start / oneFt - ft));
            if (in >= 1.0f) {
                ++ft;
                in = 0f;
            }
            sb.append(ft);
            sb.append(" ft ");
            if (in > 0) {
                sb.append(String.valueOf(in).replace("0.", ""));
            }
            start += oneInch;
            Log.i("measure", sb.toString());
        }
    }

这是记录的值

121 cm, 4 ft
124 cm, 4 ft 08
127 cm, 4 ft 17
129 cm, 4 ft 25

打印为 4 ft 08,如何将英寸部分打印为整数,像这样?

121 cm, 4 ft
124 cm, 4 ft 1
127 cm, 4 ft 2
129 cm, 4 ft 3

最佳答案

不要使用字符串进行数字运算。做数学时,使用数学运算符和数学函数:

in = (start / oneFt - ft) * 12;

您根本不需要对数字进行四舍五入。让 DecimalFormat 进行舍入:

if (in > 0) {
    sb.append(decimalFormat.format(in));
}

关于java - Java 中仅将小数点四舍五入到最接近的十位,例如 1.17 到 1.20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49324599/

相关文章:

wpf - 是否存在可以对 x 和/或 y 轴进行对数缩放的变换矩阵?

java - JList 上的 AWT-EventQueue-1

java - 以返回值的方式打印一些东西

java - 如何从 JUnit 测试中判断 Eclipse 项目是否打开?

java - 求二维数组中某一列的平均值并将结果放入另一个矩阵中

algorithm - 浮点分频器硬件实现细节

algorithm - 如何最小化已知为 U 形的整数函数?

java - 使用 SAML 2 和 Java 的服务提供商实现

从基于源的索引转换为基于目标的索引

algorithm - 计算用于定义二次贝塞尔曲线分段的参数