2017年2月8号 数据统计单位转换(两种实现思路)

本文探讨了在处理大量数据时如何有效地进行单位转换,并提供了使用BigDecimal进行精确计算的方法。文章对比了不同语言处理大数据的优劣,并给出了具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:计算机擅长的是计算不是逻辑判断,计算中移位的效率更高。另外,能不用递归则不用。
该业务数据最大转换到T(单位可扩张,第一种实现思路的限制在BigDecimal能支持的大小,第二种实现限制在语言本身或者说没有限制)为单位
思路:
逢1024进一个单位(借鉴进制思想,这里可以随意设置,只是我的代码不支持,当时没考虑这个),但是注意BigInteger除法是取整运算,所以不能直接以BigInteger类型的数据直接计算,而是用BigDecimal做计算。注意:代码中的注释部分

另一种做法(使用范围广,能处理的数据更大):数组模拟大数四则运算。Java实现不受数组长度限制,只要内存足够便可以开到足够大。但是Java这种高级语言的时间效率相对C语言较低,大概是3倍关系。但是C语言数组有长度限制(C的最大数组大小为10W,不过这个长度依然够用)。另外使用C语言时注意初始化(一定要注意,否则付出血的代价)。C语言不支持类似Java的所谓类型的自动转换,不要在C中做类型长度的扩张,否则就算做了初始化一样会出错(eg:以%64I的形式输出int类型的数据)。

好吧,Java的BigDecimal是数组模拟的(去源码扫一眼,如果是这样那么它就没什么长度限制)。不用写了。

/**
     * 获取汇聚数据量   2017年2月8号 修改
     * @param  Map<String,BigInteger>  kpiMeasures
     * @param  KpiModel                kpiModel
     * @return kpiModel
     * */
    public KpiModel getDatasizeCount(Map<String,BigInteger> kpiMeasures) {
        KpiModel kpiModel = new KpiModel();
        try {
            kpiModel.setKpiCode("datasizeCount");
            kpiModel.setKpiName("汇聚数据量");
             
            final char[] dataUnit = new char[] {'B''K''M''G''T'};
            String datasizeCountStr = String.valueOf(kpiMeasures.get("datasizeCount"));//注意:必须用String.valueOf()方法转换,否则会报类型转换错误
            BigDecimal result = new BigDecimal(datasizeCountStr);
            final BigDecimal unit = BigDecimal.valueOf(1024);
             
            int index = 0;
            while (result.compareTo(unit) > 0 && index < 4) {
                index ++;
                result = result.divide(unit, 2, BigDecimal.ROUND_HALF_UP);
            }
 
            kpiModel.setKpiUnit(dataUnit[index] + "");
            kpiModel.setKpiValue(String.valueOf(result));
        catch (Exception e) {
            e.printStackTrace();
        }
         
        return kpiModel;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值