You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中重写toString方法让数值保留两位小数(ArrayList存对象)

解决ArrayList中对象属性保留两位小数输出的问题

我来帮你搞定这个问题~你遇到的核心问题有两个:一是直接用printf输出Object类型元素时,编译器没法识别它的具体类型和内部数值属性;二是原来的toString方法没对小数做格式化处理。下面给你两种可行的解决方案,推荐第一种更省心的方式:

方案一:重写toString时直接格式化小数(推荐)

这种方式最优雅,修改Loan和Circle的toString方法,在返回字符串时就把数值格式化为两位小数。这样不管是直接打印对象,还是从ArrayList里取出打印,都会自动输出符合要求的格式。

修改后的完整代码如下:

import java.util.ArrayList;
import java.util.Scanner;

class Loan {
    double loan;

    @Override
    public String toString() {
        // 用String.format把loan格式化为两位小数
        return String.format("Loan: %.2f", loan);
    }
}

class Frame {
    String framename;

    @Override
    public String toString() {
        return "Frame: " + framename;
    }
}

class Circle {
    double radius;

    @Override
    public String toString() {
        // 同样把radius格式化为两位小数
        return String.format("Circle: %.2f", radius);
    }
}

class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Loan loan = new Loan();
        Frame frame = new Frame();
        Circle circle = new Circle();

        loan.loan = input.nextDouble();
        frame.framename = input.next();
        circle.radius = input.nextDouble();

        ArrayList<Object> mylist = new ArrayList<>();
        mylist.add(loan);
        mylist.add(frame);
        mylist.add(circle);

        // 直接打印就会得到格式化后的结果
        System.out.println(mylist.get(0));
        System.out.println(mylist.get(1));
        System.out.println(mylist.get(2));
    }
}

方案二:使用printf时强制类型转换并获取属性

如果你不想修改toString方法,那得先把ArrayList里的Object强制转成对应的类,再取出内部的数值属性传给printf。示例代码如下:

// 替换Main类main方法中的打印部分
System.out.printf("Loan: %.2f%n", ((Loan) mylist.get(0)).loan);
System.out.println(mylist.get(1)); // Frame直接打印即可
System.out.printf("Circle: %.2f%n", ((Circle) mylist.get(2)).radius);

为什么原来的printf没生效?

你之前试的System.out.printf("%.2f",mylist.get(2))会报错或者无法正常格式化,因为mylist.get(2)返回的是Object类型,而printf的%.2f格式符需要接收double或float类型的参数。编译器不知道这个Object是Circle对象,也没法直接提取它的radius属性,所以必须先做类型转换,取出属性值再传入才行。

内容的提问来源于stack exchange,提问作者Dedicated User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:51