一般直接用简单的double等来做浮点计算可能会因为计算机的浮点运算机制出现一点问题,不符合生活中的计算常识,于是java就给我们包装了大数据类,bigdecimal用于处理浮点数据类。当然也有处理整数的bigInteger类。  

  这个直接看下面的代码就行了。最好传入都用string,这样不会出什么问题,笔者曾经用long等出现问题。

package com.csshu;

import java.math.BigDecimal;

public class Test {
public static void main(String[] args) {
long a1 = 4096;
long a2 = 16;
long b1 = 24031232;
long b2 = 15491;
long c1 = 11292672;
long c2 = 13360;
long d1 = 4161536;
long d2 = 4928; Test t = new Test();
String a = t.computeSpeed(a1+"", a2);
String b = t.computeSpeed(b1+"", b2);
String c = t.computeSpeed(c1+"", c2);
String d = t.computeSpeed(d1+"", d2); String a0 = t.computeFileSize(a);
String b0 = t.computeFileSize(b);
String c0 = t.computeFileSize(c);
String d0 = t.computeFileSize(d); System.out.println(a0);
System.out.println(b0);
System.out.println(c0);
System.out.println(d0);
} /**
* 计算速度,以字节为单位返回
* @param size 文件大小 byte
* @param time 所用时间 millseconds
* @return
*/
public String computeSpeed(String size,long time){
String speed = "";
BigDecimal bd1 = new BigDecimal(size);
BigDecimal bd2 = new BigDecimal(time+""); // long直接传进来要出问题,5637可能变成5.637
bd2 = bd2.divide(new BigDecimal(1000+"")); // 变成以秒为单位
System.out.println(bd2.toString());
BigDecimal bd3 = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_EVEN);
speed = bd3.toString();
return speed;
} /**
* 计算文件大小,要求输入以byte为单位的大小。如果超过TB则返回""
* @param fileSize
* @return
*/
public String computeFileSize(String fileSize){
String fileSizeString = "";
BigDecimal bd1 = new BigDecimal(fileSize);
BigDecimal bd2 = new BigDecimal(1024);
double d = Double.valueOf(fileSize);
if(d < 1024){ // B
fileSizeString = fileSize+"B/s";
}else if(d < Math.pow(1024,2)){ // KB 1024B -1KB 1000
BigDecimal bd3 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_EVEN);
fileSizeString = bd3.toString()+"KB/s";
}else if(d < Math.pow(1024,3)){ // MB
BigDecimal bd3 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_EVEN);
fileSizeString = bd3.toString()+"KB/s";
}else if (d < Math.pow(1024,4)){ // GB
BigDecimal bd3 = bd1.divide(bd2,2,BigDecimal.ROUND_HALF_EVEN);
fileSizeString = bd3.toString()+"KB/s";
}
return fileSizeString;
}
}

对bigDecimal的一些探索的更多相关文章

  1. BigDecimal setScale()设置无效 scale()取得的值不是setScale()设置的值

    最近查看rebate数据时,发现一个bug,主要现象是,当扣款支付宝的账号款项时,返回的是数字的金额为元,而数据库把金额存储为分,这中间要做元与分的转化,这个转化规则很简单,就是*100的,所以一开始 ...

  2. Elasticsearch 在地理信息空间索引的探索和演进

    vivo 互联网服务器团队- Shuai Guangying 本文梳理了Elasticsearch对于数值索引实现方案的升级和优化思考,从2015年至今数值索引的方案经历了多个版本的迭代,实现思路从最 ...

  3. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  4. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  5. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  6. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  7. Linux学习之探索文件系统

    Linux,一起学习进步-    ls With it, we can see directory contents and determine a variety of important file ...

  8. 马里奥AI实现方式探索 ——神经网络+增强学习

    [TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...

  9. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

随机推荐

  1. ruby编程语言-学习笔记3(第4章 表达式和操作符)

    4.6 操作符 了解优先级很重要 位移操作符 (0b1011)<< 1       #   ==> "10110"      11 << 1 = 22 ...

  2. js获取本月第几周和本年第几周

    var getMonthWeek = function (a, b, c) { /* a = d = 当前日期 b = 6 - w = 当前周的还有几天过完(不算今天) a + b 的和在除以7 就是 ...

  3. shell color

    shell 输出着色 格式: echo "/033[字背景颜色;字体颜色m字符串/033[控制码" 如果单纯显示字体颜色可以固定控制码位0m. 格式: echo "/03 ...

  4. 拉普拉斯特征图降维及其python实现

    这种方法假设样本点在光滑的流形上,这一方法的计算数据的低维表达,局部近邻信息被最优的保存.以这种方式,可以得到一个能反映流形的几何结构的解. 步骤一:构建一个图G=(V,E),其中V={vi,i=1, ...

  5. linux shell 中"2>&1"含义

    脚本是:      nohup /mnt/Nand3/H2000G  >/dev/null  2>&1  &      对于& 1 更准确的说应该是文件描述符 1, ...

  6. java字节流

    一. 字节输入流:InputStream(抽象类,所有字节输入流的超类) 1.FileInputStream:    文件输入流 FileInputStream fileIS = new FileIn ...

  7. 143. Sort Colors II

    最后更新 一刷 class Solution { public void sortColors2(int[] colors, int k) { // write your code here if ( ...

  8. cocos2d-x简单动画

    转自:http://4137613.blog.51cto.com/4127613/759610 这里只给出最基本的动画代码,具体使用要根据实际情况自己封装.最好自己开发一个编辑器.额外说一句,开发编辑 ...

  9. Ubuntu 12.04 安装搜狗输入法

    安装指南 Ubuntu / Ubuntu Kylin 14.04 LTS 版本 只需双击下载的 deb 软件包,即可直接安装搜狗输入法. Ubuntu 12.04 LTS 版本 由于 Ubuntu 1 ...

  10. CSS3:clip-path具体解释

    我的一个学生,Heather Banks,想要实现他在Squarespace看到的一个效果: 依据她的以往经验,这个站点的HTML和CSS是全然在她的能力范围以内,于是我帮助她完毕了这个效果.显示na ...