对bigDecimal的一些探索
一般直接用简单的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的一些探索的更多相关文章
- BigDecimal setScale()设置无效 scale()取得的值不是setScale()设置的值
最近查看rebate数据时,发现一个bug,主要现象是,当扣款支付宝的账号款项时,返回的是数字的金额为元,而数据库把金额存储为分,这中间要做元与分的转化,这个转化规则很简单,就是*100的,所以一开始 ...
- Elasticsearch 在地理信息空间索引的探索和演进
vivo 互联网服务器团队- Shuai Guangying 本文梳理了Elasticsearch对于数值索引实现方案的升级和优化思考,从2015年至今数值索引的方案经历了多个版本的迭代,实现思路从最 ...
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- 【探索】利用 canvas 实现数据压缩
前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Linux学习之探索文件系统
Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- C++随笔:.NET CoreCLR之GC探索(4)
今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...
随机推荐
- App.config提示错误“配置系统未能初始化”
解决: "如果配置文件中包含 configSections 元素,则 configSections 元素必须是 configuration 元素的第一个子元素." 所以它前面如果有 ...
- spring-- 事务--9
9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...
- 如何处理alert、confirm、prompt对话框
import java.io.File; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.ope ...
- 五指CMS发布,主打高性能
近日,五指CMS正式发布.给沉静已久的国内 CMS 行业引来不少的关注.五指CMS由原PHPCMS v9的负责人王参加主导开发.我们可以看到,由于移动互联网以及大数据的崛起,个人站长市场的逐渐减少,国 ...
- 五指CMS v1.2 GBK 发布下载
五指CMS v1.2 GBK 版本下载地址: http://www.wuzhicms.com/uploadfile/wuzhicms/wuzhicms-v1.2.zip 从内测到公测,五指 ...
- vm虚拟机上安装apache+php+ftp+mysql
我在vm虚拟机上想安装 winxp和linux,然后在linux机上装apache+php+ftp+mysql,以下为我的按装过程: 1:连通虚拟机:两个虚拟机都选Host-Onl,查看主机Virt ...
- Casio普通计算器编程
用xelatex写了个奇怪的东西……欢乐向 PDF http://files.cnblogs.com/htfy/calc.pdf TEX http://files.cnblogs.com/htfy/ ...
- Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序
Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序).没错,Robocopy的功能是拷贝文件,你也许会觉得无聊并且要翻阅下一篇文章 ...
- pytho
字符串格式化:求模操作符%可以用来将其他值转换为包含转换标志的字符串,对值进行不同方法的格式化,左右对齐,字段宽度精度,增加符号,左填充数字 字符串方法join split istitle capit ...
- Spring源码入门——DefaultBeanNameGenerator解析
我们知道在spring中每个bean都要有一个id或者name标示每个唯一的bean,在xml中定义一个bean可以指定其id和name值,但那些没有指定的,或者注解的spring的beanname怎 ...