一般的思维,1.003*1000=1003,
.....
int ofset = 1000;
double dblvalue = ((Number)object).doubleValue() * ofset;
............这样计算下来,我的dblvalue 的值是1002.9999999999...
因为在下面的计算我是format后,取到的是1002.
所以,想请教各位大虾们,应该通过什么样的计算,我的dblvalue值是1003,当然类型还是需要double的?
.....
int ofset = 1000;
double dblvalue = ((Number)object).doubleValue() * ofset;
............这样计算下来,我的dblvalue 的值是1002.9999999999...
因为在下面的计算我是format后,取到的是1002.
所以,想请教各位大虾们,应该通过什么样的计算,我的dblvalue值是1003,当然类型还是需要double的?
解决方案 »
- 传值
- 组件的内部填充与外部填充有什么区别?可不可以这样理解内部填充实际上是设置组件的大小?
- JAVA老鸟们,给小弟推荐几本学习java的书吧
- 游戏运行运行十几分钟后出现下面的错误,各位兄弟帮忙解决一下
- 请各位帮一下忙!
- 介绍一个可一下载视频教程的地方!!!
- java.sql.SQLException :[Microsoft][ODBC SQL Server Driver]连接占线导致另一个hstmt
- 从数据库读取数据生成Domcument对象。发生内存溢出错误?
- 在线等待,有没有什么方法可以显示在java中jsp页面的URL地址,函数也行
- 实现一个自己的Java编译器
- 一个很头痛的字符串替换问题
- java有什么好?
* @param args
*/
public static void main(String[] args) {
double i =1.003;
double j = 1000;
BigDecimal result = new BigDecimal(i).multiply(new BigDecimal(j));
System.out.println(result.setScale(0,0));
}}
java中无法表示10的负幂,所以需要BigDecimal包装一下指定精度,楼主可以看看
<<Java解惑>>这本书
public class DoubleTest { /**
* @param args
*/
public static void main(String[] args) {
double i = 1.002;
double j = 1000;
BigDecimal result = new BigDecimal(i).multiply(new BigDecimal(j));
System.out.println(result.setScale(0,0));
}}
这时候,输出的也是1003了,本人愚笨,对BigDecimal 这个类一点也不知道.请指教.
1.002*1000=1002.000000000xxx,不精确的,看到的跟实际内存中保存的是不一样的,
1.002*1000,如果确定是整数,则自己取整,如果是1.0021*1000=1002.100000000xxx,按楼主的需求可能是要1002.1
如果是1.00211*1000按楼主的需求可能是1002.11,这些都是人的计算,而不是计算机的计算,所以应该做不到的吧
BigDecimal(double)构造函数,会在计算过程中产生舍入误差,最好用整数或String的构造函数。