Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将四舍五入的值存储在表中而不只是将其显示为四舍五入

如何将四舍五入的值存储在表中而不只是将其显示为四舍五入
EN

Stack Overflow用户
提问于 2014-06-05 05:38:05
回答 1查看 83关注 0票数 0

我有一个表格,其中我需要把数字四舍五入到小数点后4位。我成功地做到了这一点,但问题是,当表显示四舍五入的值时,实际存储的值并不是四舍五入的值(我使用BigDecimal是因为我希望能够控制单元格的舍入行为)。在打印单元格值时,即使表中显示的值是四舍五入的值,也会得到小数超过4个的数字。我写了我自己的编辑和渲染器如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DoubleEditor4 extends DefaultCellEditor {

    public DoubleEditor4() {
        super(new JFormattedTextField());
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        JFormattedTextField editor = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
        if (value!=null){
            String num = (String) value;
            BigDecimal num2 = new BigDecimal(num).setScale(4, BigDecimal.ROUND_HALF_UP);
            String text = num2.toString();
            editor.setHorizontalAlignment(SwingConstants.RIGHT);
            editor.setText(text);
        }
        return editor;
    }   
}

class DoubleRenderer4 extends DefaultTableCellRenderer {
    public DoubleRenderer4() { 
        super();
        this.setHorizontalAlignment(SwingConstants.RIGHT);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        value = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
        return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column );
    }

    public void setValue(Object value) {
        BigDecimal num2 = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
        String text = num2.toString();
        setText(text);
    }
}

如果表模型中存储的值不是四舍五入的值,那么我做错了什么呢?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-07 06:08:43

通过在单元编辑器类中重写getCellEditorValue()方法,我设法解决了这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public Object getCellEditorValue() {
    Object v = super.getCellEditorValue();
    BigDecimal n = new BigDecimal(v.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
    return n.toString();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24061770

复制
相关文章
java中的四舍五入——几种四舍五入的写法
// 方式一:BigDecimal方式 double f = 3.1315; BigDecimal b = new BigDecimal(new Double(f).toString); double f1 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); 注意:这里一定不要直接使用new BigDecimal(double)的构造方法, 而要使用new BigDecimal(new Double(1.1315).toString())的方式,不然会出现精确问题
全栈程序员站长
2022/09/15
9900
Java中的四舍五入
大概在小学的时候我们就学过四舍五入, 不过在编程语言中这个概念跟我们所熟悉的算法有点出入。 如果面试中考察你对Math.round()的用法,不知道能不能准确答的上来?
PhoenixZheng
2018/08/07
8650
java中的四舍五入函数_java中进行四舍五入
select round(111112.23248987,6) from dual;
全栈程序员站长
2022/08/31
1.1K0
pandas基础:在pandas中对数值四舍五入
df= pd.DataFrame({'a':[3.14159, 1.234, 3.456, 10.111, -3.3],
fanjy
2022/06/04
10.5K0
pandas基础:在pandas中对数值四舍五入
四舍五入
public static double Round(double d, int i)         {             if(d >=0)             {                 d += 5 * Math.Pow(10, -(i + 1));             }             else             {                 d += -5 * Math.Pow(10, -(i + 1));             }         
用户1075292
2018/01/23
8740
四舍五入的坑
话说,再做一个财务报表统计中,发现一个简单的乘法 3.00 * 0.045 =0.135,按照咱们的四写五入就是 0.14。但我用C# 写var Value = Math.Round(3.00 * 0.045, 2), 竟然是0.13.。。不是预期的0.14,怎么办好呢。。
谭广健
2023/02/03
7430
java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」
packagecom.longge.mytest;importjava.math.BigDecimal;importjava.math.RoundingMode;importjava.text.DecimalFormat;importorg.junit.Test;public classTestDecimal {
全栈程序员站长
2022/08/26
1.5K0
java 四舍五入运算_JAVA正确的四舍五入方法「建议收藏」
php四舍五入
大家可以看到我们用到了sprintf函数对$n进行了格式化%.2f是目标格式,其中2表示两位f表示float(浮点型) 第3为小数6被四舍五入
黄啊码
2020/05/29
2K0
python中四舍五入,颠覆你的想象
上一节知识点主要讲到了进制转换,这一块其实属于计算机基础课程。在Python中主要涉及到:
刘金玉编程
2019/08/26
6490
Java四舍五入计算
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143324.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
7450
PYTHON3 中的虚假四舍五入:round()
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan
CN_Simo
2018/07/31
5410
PYTHON3 中的虚假四舍五入:round()
js中四舍五入的方法_JS取整
Math还有很多丰富的方法,具体可以参考已下MDN文档: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math.
全栈程序员站长
2022/11/03
2.4K0
Java中数字的四舍五入和取整
Math.ceil 函数接收一个double类型的参数,用于对数字进行向上取整(遇小数进1),即返回一个大于或等于传入参数的最小整数(但还是以double类型返回)。
全栈程序员站长
2022/09/08
2.2K0
PYTHON3 中的虚假四舍五入:round()
摘要总结:本篇文章主要介绍了在 Python 3 中使用 round() 函数进行四舍五入时出现的一些问题及解决方法。作者通过实例演示了 round() 函数在 Python 3 中的行为与 Python 2 的不同,并提供了精确的四舍五入方法的总结。
CN_Simo
2017/12/26
9120
PYTHON3 中的虚假四舍五入:round()
java四舍五入取整算法(小数四舍五入取整公式)
static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储)。
全栈程序员站长
2022/07/31
2.2K0
java四舍五入取整算法(小数四舍五入取整公式)
java四舍五入函数的用法
向上舍入,将数值向上舍入为最接近的整数;如3.4舍入为4.0,3.6也舍入为4.0
全栈程序员站长
2022/08/31
1.5K0
java四舍五入函数的用法
Python判断数字四舍五入
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100686.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/30
5080
ABAP 关于四舍五入算法
今天有人问我关于四舍五入的算法 其实,SAP提供了函数,没有函数也是可以的 但还是用函数做比较方便,举例如下: DATA: L_DATA TYPE P DECIMALS 3 VALUE '1.456'. DATA: L_DATA1 TYPE P DECIMALS 3. DATA: L_DATA2 TYPE P DECIMALS 3 VALUE '1.546'. * 方法一 CALL FUNCTION 'HR_NZ_ROUNDING_DECIMALS' EXPORTING VALUE_I
matinal
2020/11/26
1.2K0
恶心的0.5四舍五入问题
四舍五入是财务类应用中常见的需求,按中国人的财务习惯,遇到0.5统一向上进位,但是c#与java中默认的却不是这样。 见c#代码: 1 static void Main(string[] args) 2 { 3 Decimal d = 301353.05M; 4 Console.WriteLine(d);//301353.05 5 Console.WriteLine(Math.Round(d, 1));/
菩提树下的杨过
2018/01/19
1.3K0
四舍五入在 Go 语言中为何如此困难?
四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round 的功能,它最少支持常用的 Round half up 算法。
逆锋起笔
2021/09/08
4680

相似问题

四舍五入并显示值

21

Java:四舍五入为任意值

21

将联接值存储在PHP中并将其显示为表

21

表将值四舍五入为整数,即使表中的数据类型为decimal

116

在Excel中四舍五入为一组值

311
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文