首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何储存0.0001352?

如何储存0.0001352?
EN

Stack Overflow用户
提问于 2014-09-10 01:02:30
回答 3查看 59关注 0票数 0

我有一个类,它有一个双“sizeinMegs”变量,只要值很小,比如0.00025 megs,它就会存储0.0,就像调试表中看到的那样。

我怎样才能把它保存在十进制的荣耀中?

这是我的密码:

代码语言:javascript
运行
复制
        thePdf.setFileSizeInMegaBytes((theFile.length() / 1000000)); //that's a double

        double size = theFile.length(); // this returns say 12345
        size = size / 1000000; this returns 0.012345
        double storedValue = thePdf.getFileSizeInMegaBytes(); // this shows 0.0 in the watch window

        String value;
        value = fmt(size); //this shows the right value in the string

        lblTest.setText("Size: " +  value + " MB"); 

 ....

public static String fmt(double d)
{
    if(d == (int) d)
        return String.format("%d",(int)d);
    else
        return String.format("%s",d);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-10 01:19:29

您应该使用BigDecimal而不是double,这样您就不会失去精度。您能否在以下文件中显示代码:

代码语言:javascript
运行
复制
thePdf.setFileSizeInMegaBytes()

代码语言:javascript
运行
复制
thePdf.getFileSizeInMegaBytes()
票数 -1
EN

Stack Overflow用户

发布于 2014-09-10 03:45:34

这里很难说,因为我看不到"theFile“的声明,但是如果length()方法返回了一个长值或int值,那么程序的第一行就是执行整数/长除法,因此任何值都会变成0。

如果是这样的话,先把长度转换成双倍。

THe原因第二部分的工作是,这个声明有一个隐式转换从int/long到double,因此任何后续的计算都会导致加倍。

双尺寸= theFile.length();

票数 1
EN

Stack Overflow用户

发布于 2014-09-21 23:38:34

你的问题是整数除法。而不是

代码语言:javascript
运行
复制
theFile.length() / 1000000

总是向下旋转,你可以写

代码语言:javascript
运行
复制
theFile.length() / 1000000.0

这迫使这是一个非整数除法。

每当您将/放在两个int类型的表达式之间时,结果也将是一个int,并且它将被舍入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25755797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档