当前位置: 首页 > 知识库问答 >
问题:

TableView列数据设置为小数点后2位

阴阳
2023-03-14

我有一个类文件Nepokretnost。java中的构造函数如下所示:

public Nepokretnost(String tipNepokretnosti, String zona, String pravo, 
        double povrsina, int amortizacija, double osnovica, double kredit, double porez) {
    this.tipNepokretnosti = tipNepokretnosti;
    this.zona = zona;
    this.pravo = pravo;
    this.povrsina = povrsina;
    this.amortizacija = amortizacija;
    this.osnovica = osnovica;
    this.kredit = kredit;
    this.porez = porez; 
}

此外,我还为每个类字段提供了带有列的TableView。我的问题是双字段“povrsina”。我想从TextField设置它。

我将名为txtPovrsina的TextField的内容发送给双变量

double dPovrsina;
dPovrsina = Double.parseDouble(txtPovrsina.getText());

然后将所有字段放入TableView:

ObservableList<Nepokretnost> data = tblTabela.getItems();
    data.add(new Nepokretnost(cboNepokretnost.getValue().toString(),cboZona.getValue().toString(),
            txtPravo,dPovrsina,40,450000.25,2500.00,2500.00));

一切都很好,但我想要一些我不知道如何设置的应用程序行为。现在,当我在TextField中输入int-like 25时,在TableView列中得到了25.0。我希望所有列单元格都有精确的2位小数。

我尝试了:

DecimalFormat df=new DecimalFormat("#.00");
ObservableList<Nepokretnost> data = tblTabela.getItems();
    data.add(new Nepokretnost(cboNepokretnost.getValue().toString(),cboZona.getValue().toString(),
            txtPravo,df.format(dPovrsina),40,450000.25,2500.00,2500.00));

但我得到错误“不兼容的类型:字符串不能转换为double”

我仍然是java的新手,但我猜格式是在生成字符串,我想输入保持双精度,只有两个小数位。像本专栏一样,我对其他双字段也有同样的问题。

有人能给我一些方向吗?

共有2个答案

金令
2023-03-14

如果您在只读包装器上发现值转换错误,请使用该值作为对象。

TableView<Nepokretnost> table = new TableView<>();
TableColumn<Nepokretnost, Number> povrsinaCol = new TableColumn<>("Povrsina");
povrsinaCol.setCellValueFactory(cellData -> 
    new ReadOnlyDoubleWrapper(cellData.getValue().getPovrsina().asObject()));

povrsinaCol.setCellFactory(tc -> new TableCell<Nepokretnost, Number>() {
    @Override
    protected void updateItem(Number value, boolean empty) {
        super.updateItem(value, empty) ;
        if (empty) {
            setText(null);
        } else {
            setText(String.format("%0.2f", value.doubleValue()));
        }
    }
});
段干跃
2023-03-14

您希望更改数据在表中的显示方式,而不是更改数据本身。为此,需要在表列上设置单元格工厂。类似于

TableView<Nepokretnost> table = new TableView<>();
TableColumn<Nepokretnost, Number> povrsinaCol = new TableColumn<>("Povrsina");
povrsinaCol.setCellValueFactory(cellData -> 
    new ReadOnlyDoubleWrapper(cellData.getValue().getPovrsina()));

povrsinaCol.setCellFactory(tc -> new TableCell<Nepokretnost, Number>() {
    @Override
    protected void updateItem(Number value, boolean empty) {
        super.updateItem(value, empty) ;
        if (empty) {
            setText(null);
        } else {
            setText(String.format("%0.2f", value.doubleValue()));
        }
    }
});
 类似资料:
  • 问题内容: 我有1个类文件Nepokretnost.java,其中的构造函数如下所示: 此外,对于每个类字段,我都有带有列的TableView。我的问题是双字段“ povrsina”。我想从TextField设置它。 我将名为txtPovrsina的TextField的内容发送给double变量: 然后将所有字段放在TableView中: 一切运行良好,但是我想要一些应用程序的行为,但我不知道如何

  • 问题内容: 我正在尝试将双精度数格式化为精确到小数点后2位(如果有分数),然后使用DecimalFormat将其截断 因此,我想取得下一个结果: 变体#1 变体#2 有什么想法可以选择我的情况吗? 问题答案: 我达到的唯一解决方案是使用 if语句在这里提到 测试中 如果有人知道更优雅的方式,请分享!

  • 我的工作代码如下: 它产生以下输出: 但是我的情节有两个问题我似乎无法解决: 即使我用pd.options.display.float_format = '{:.2f}格式裁剪文本显示,该图仍然显示14位小数。

  • 我有一个,我希望将用户的输入限制为纯数字或小数最多2位的数字。 基本上,我要求的是一个价格输入。 我想避免做正则表达式。有办法做到吗?

  • 如何将结果四舍五入到小数点后2位并显示在结果标签上?我找到了一些陈述,但我对Swift是新手,实际上很难为我的项目重建样本。

  • 我在C#中尝试了这一点,结果是正确的。