首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >正值变为负值

正值变为负值
EN

Stack Overflow用户
提问于 2013-11-12 22:50:48
回答 3查看 264关注 0票数 1

对不起,我不知道这个问题的标题到底是什么。有人能告诉我这怎么可能吗?

绿线还没被执行。

编辑:在这里,tmp和size肯定是正整数。

编辑:源代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyDownloadService extends IntentService {
String urlD, name, sole, urlOfImage = "";
Context conte;
static int q = -1;
int progress = 0, nin, tmp = 0;
File file;
public static final String NOTIFICATION = "com.example.downloader2.ShowDownloadsActivity";
public static final String NOTIFICATION2 = "com.example.downloader2.ShowDownloadsActivity2";
AppGlobal apg;

public MyDownloadService(String name) {
    super("Downloading");
}

public MyDownloadService() {
    super("Downloading");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    q = q + 1;
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onCreate() {
    super.onCreate();
    conte = this;
}

@Override
protected void onHandleIntent(Intent intent) {
    apg = (AppGlobal) getApplication();
    urlD = intent.getExtras().getString("url");
    name = intent.getExtras().getString("name");
    nin = intent.getExtras().getInt("nin");
    urlOfImage = intent.getExtras().getString("urlOfImage");
    int ret = intent.getExtras().getInt("retry");
    if (ret == 1) {
        Toast.makeText(conte,
                "Please wait... Your download will start soon",
                Toast.LENGTH_SHORT).show();
    }
    sole = name;
    try {
        int size = 0;
        final int TIMEOUT_CONNECTION = 15000;// 15sec
        final int TIMEOUT_SOCKET = 30000;// 30sec
        String imageURL = urlD;
        URL url = new URL(imageURL);
        long startTime = System.currentTimeMillis();
        Log.e("Note: ", "image download beginning: " + imageURL);
        // Open a connection to that URL.
        URLConnection ucon = url.openConnection();

        // this timeout affects how long it takes for the app to realize
        // there's a connection problem
        ucon.setReadTimeout(TIMEOUT_CONNECTION);
        ucon.setConnectTimeout(TIMEOUT_SOCKET);

        // Define InputStreams to read from the URLConnection.
        // uses 3KB download buffer
        InputStream is = ucon.getInputStream();
        size = ucon.getContentLength();
        BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);
        File wallpaperDirectory = new File(
                Environment.getExternalStorageDirectory() + "/myFold");
        wallpaperDirectory.mkdirs();
        // sole = sole.replace("?", "_");
        // sole = sole.replace("|", "_");
        // sole = sole.replace("/", "_");
        // sole = sole.replace(":", "_");
        // sole = sole.replace("$", "_");
        file = new File(wallpaperDirectory + File.separator + sole);
        if (file.exists()) {
            file.delete();
        }

        file.createNewFile();
        apg.setInDownload(true);
        FileOutputStream outStream = new FileOutputStream(file);
        byte[] buff = new byte[5 * 1024];

        // Read bytes (and store them) until there is nothing more to
        // read(-1)
        int len;
        tmp = 0;
        while ((len = inStream.read(buff)) != -1) {
            if (apg.getCont()) {
                apg.setCont(false);
                stopSelf();
                Intent inten = new Intent();
                inten.putExtra("urlToDownload", urlD);
                inten.putExtra("timeout", 7);
                inten.putExtra("name", sole);
                inten.putExtra("progress", progress);
                inten.putExtra("nin", nin);
                inten.putExtra("url", urlD);
                inten.setAction("com.example.downloader2.BR");
                sendBroadcast(inten);
                Intent in2 = new Intent(NOTIFICATION);
                in2.putExtra("progress", progress);
                in2.putExtra("running", 0);
                in2.putExtra("name", sole);
                q--;
                sendBroadcast(in2);
                progress = 0;
                if (file.exists()) {
                    file.delete();
                }
                outStream.close();
                return;
            }
            tmp = tmp + len;
            progress = (tmp * 100) / size;
            if(progress<0)
                progress=-1*progress;
            outStream.write(buff, 0, len);
            publishP();
        }
        tmp = size;
        progress = 101;
        publishP();
        // clean up

        outStream.flush();
        outStream.close();
        inStream.close();
        Log.e("Note: ",
                "Download completed in "
                        + ((System.currentTimeMillis() - startTime) / 1000)
                        + " secs.");
    } catch (Exception e) {
        if (file.exists()) {
            file.delete();
        }
        apg.setInDownload(false);
        Intent inten = new Intent();
        inten.putExtra("urlToDownload", urlD);
        if (e.toString()
                .equals("java.io.IOException: open failed: EACCES (Permission denied)")) {
            inten.putExtra("timeout", 5);
        } else {
            inten.putExtra("timeout", 1);
        }
        inten.putExtra("name", sole);
        inten.putExtra("progress", progress);
        inten.putExtra("nin", nin);
        inten.putExtra("url", urlD);
        inten.setAction("com.example.downloader2.BR");
        sendBroadcast(inten);
        Intent in2 = new Intent(NOTIFICATION);
        in2.putExtra("progress", progress);
        in2.putExtra("running", 0);
        in2.putExtra("name", sole);
        q--;
        sendBroadcast(in2);
        progress = 0;
        Log.e("Error: ", "Error is:" + e.toString());
    }
}

protected void publishP() {
    try {
        Intent intent = new Intent();
        intent.putExtra("timeout", 0);
        intent.putExtra("progress", progress);
        intent.putExtra("nin", nin);
        intent.putExtra("name", sole);
        intent.setAction("com.example.downloader2.BR");
        sendBroadcast(intent);
        Intent in2 = new Intent(NOTIFICATION);
        if (progress > 100)
            q--;
        in2.putExtra("progress", progress);
        in2.putExtra("running", 1);
        in2.putExtra("name", sole);
        in2.putExtra("queue", q);
        sendBroadcast(in2);
    } catch (Exception e) {
        Log.e("Shit", e.toString());
    }
}

@Override
public boolean stopService(Intent name) {
    return super.stopService(name);
}
}

编辑:这3张快照是我在同一个调试器状态下拍摄的:

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-12 23:14:39

这就是所谓的溢出。当一个数字太大时,它就不能被正确地表示并且变成负数。搜索术语“溢出”以获得详细信息。

您可以尝试(float)tmp / size * 100,其基本原理是确保在计算过程中该数字不超过100。

请注意浮点转换是必要的,因为整数除法总是会给你一个整数。在你的例子中,如果你不做演员的话,你总是能得到0。

票数 2
EN

Stack Overflow用户

发布于 2013-11-12 23:01:04

你为什么不直接用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
progress = abs((tmp * 100) / size);

这样你的进步总是积极的,并且摆脱了if语句?

票数 2
EN

Stack Overflow用户

发布于 2013-11-12 23:16:58

int可以持有2147483647的最大值,您可以从医生在这里检查它。当你把你的temp乘以100时,它会溢出并给出错误的值。除以大小后,只需乘以100。

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

https://stackoverflow.com/questions/19947249

复制
相关文章
margin负值的运用
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title></title> <style> ul li{ list-style: none; bo
切图仔
2022/09/08
5460
margin为负值产生的影响
注:浮动元素在前面,后面是标准元素,然后对标准元素,设置了margin-top:-25px , 然后会发现浮动元素跟着向上了
用户9914333
2022/07/21
6030
margin为负值产生的影响
带负值的图表标签处理方法
今天跟大家分享带负值的图表标签处理方法! ▽▼▽ 在遇到某些特殊图表时,特别是一个数据系列中既有正值又有负值的情况,数据标签以及纵轴轴标签总是会相互遮挡,做出来的图表信息显得很凌乱,会影响读者的信息理
数据小磨坊
2018/04/10
4.2K0
带负值的图表标签处理方法
C++ 中有符号类型到无符号类型的转换
为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ 255,共 256 个数;int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~ 4294967295,共 4294967296 个数,接下来看下面的代码:
用户7886150
2021/02/15
1.4K0
正值开学季,高校学生成黑客攻击目标
安全机构最新研报显示,开学上课后,黑客经常将高校学生作为攻击目标,而大学校园在应对网络安全威胁时,显得力不从心。报告中指出,在保障网络安全方面,高校投入的工作远不及零售和医疗健康领域。 该机构追踪了2013年7月到2014年6月间,重大体育赛事时高校的网络安全表现,包括东南联盟、大西洋海岸联盟、大十二联盟以及常青藤联盟赛事,期间,高校网络安全表现都出现显著下滑情况。对于网络罪犯而言,高校学生是名副其实的“金矿”,黑客会盗取后者个人信息获利,范围包括社会保障号、信用卡信息等。
安恒信息
2018/04/11
3990
正值开学季,高校学生成黑客攻击目标
【CSS】margin 外边距负值使用案例 ( 正常外边距 | 使用外边距负值实现边框重叠 | 重叠边框突出显示 )
margine 正常情况下使用 , 设置 float 浮动 , 使得相邻的盒子模型紧贴在一起 ;
韩曙亮
2023/04/24
1.2K0
【CSS】margin 外边距负值使用案例 ( 正常外边距 | 使用外边距负值实现边框重叠 | 重叠边框突出显示 )
关于批次效应矫正后出现负值
  a batch effect occurs when non-biological factors in an experiment cause changes in the data produced by the experiment. Such effects can lead to inaccurate conclusions when their causes are correlated with one or more outcomes of interest in an experiment. They are common in many types of high-throughput sequencing experiments, including those using microarrays, mass spectrometers
生信技能树
2020/08/17
6.6K0
关于批次效应矫正后出现负值
Math.abs()求绝对值返回负值BUG分享
近期在推进代码质量的过程中,发现一个隐藏的知识点,就是Math.abs()求一个int数据的绝对值的时候会出现返回结果为负值的BUG。
FunTester
2020/12/01
1.3K0
CSS3变形属性
CSS3变形 CSS2.1中的页面都是静态的,网页设计师也习惯把它作为页面效果的设计工具。多年来,Web设计师依赖于图片、Flash或 JavaScript才能完成修改页面的外观。 CSS3将改变设计师这种思维,借助CSS3可以轻松倾斜、缩放、移动以及翻转元素。 2012年9月,W3C组织发布了CSS3变形工作草案。允许CSS把元素转变为2D或3D空间,这个草案包括了CSS32D变形和CSS33D变形。CSS3变形是一些效果的集合, 比如平移、旋转、缩放和倾斜效果,每个效果都称为变形函数( Transform Function),它们可以操控元素发生旋转、缩放、平移等变化。 这些效果在之前都需要依赖图片、Flash或JavaScript才能完成。而使用纯CSS来完成这些变形无须加载这些额外的文件,再一次提升了开发效率, 提高了页面的执行效率。 CSS3变形属性及函数: CSS3变形允许动态的控制元素,可以在屏幕周围移动它们,缩小或扩大、旋转,或结合所有这些产生复杂的动画效果。通过CSS变形,可以让元素生成静态视觉效果,也可以很容易结合CSS3的transition和动画的keyframe产生 一些动画效果:http:/ /www.iis7.com/b/wzjk/ CSS3变形中具有 X/ Y可用的函数: translateX()、translateY()、scaleX()、scaleY()、skewX()和skewY()。 1,CSS3 2D变形函数包括: translate()、scale()、rotate()和skew()。translate()函数接受CSS的标准度量单位; scale()函数接受 一个0~1 之间的十进制值; rotate() 和 skew() 两个函数都接受 一个径向的度量单位值deg。除了rotate()函数之外,每个函数都接受X轴和Y轴的参数。 2D变形中还有一个矩阵matrix()函数, 包括6个参数。 2,CSS3 3D变形函数包括: rotateX()、rotateY()、rotate3d()、translateZ()、translate3d()、scaleZ()和scale3d()。 3D变形中也包括一个矩阵matrix3d()函数, 包括16 个参数。 CSS 变形属性详解: transform属性指一组转换函数, transform-origin属性指定元素的中心点在哪, 新增加了第三个数transform-origin-z, 控制元素三维空间中心点。 transform-style的值设置为preserve- 3d, 建立 一个3D渲染环境。 :CSS3 2D变形 在二维或三维空间,元素可以被扭曲、移位或旋转。只不过2D变形工作在X轴和Y轴,也就是大家常说的水平轴和垂直轴;而3D变形工作在X轴和Y轴之外, 还有一个Z轴,这些3D变换不仅可以定义元素的长度和宽度,还有深度。首先讨论元素在2D平面如何变换,然后在进入3D变换的讨论。CSS32D变换让Web设计师有了更多的自由来装饰和变形HTML组件,同时有更多的功能装饰文本和更多的动画选项来装饰div元素。2D位移在这里translate是一种方法,将元素向指定的方向移动, 类似于position中的relative。可以简单理解为,使用translate()函数可以把元素从原来的位置移动,而不影响在 X、 Y 轴上任何组件。 translate() 函数可以取一个值tx,也可以取两个值tx和 ty, ·tx:代表X轴( 横坐标)移动的向量长度, 当其值为正值时, 元素向X轴右方向移动, 反之其值为负值时, 元素向X轴左方向移动。 ·ty:代表Y轴( 纵坐标) 移动的向量长度,当其值为正值时, 元素向Y轴下方向移动, 反之其值为负值时, 元素向Y轴上方向移动。 如果ty没有显式设置时, 相当于ty=0。 结合起来, translate()函数移动元素主要有以下三种移动。 -水平移动: 向右移动 translate( tx, 0) 和向左移动 translate(- tx, 0)。 -垂直移动:向上移动 translate( 0,- ty) 和向下移动 translate( 0, ty)。 -对角移动:右下角移动 translate( tx, ty)、右上角移动translate( tx,- ty)、 左上角移动translate(- tx,- ty) 和左下角移动translate(- tx, ty)。 如果要将对象沿着一个方向移动, 如沿着水平轴或者纵轴移动, 可以使用translate( tx, 0) 和translate( 0, ty)来实现。 其实在变形中还为单独一个方向移动对象提供了更简单的方法。 ·translateX():水平方向移动一个对象。通过给定一个X轴方向的数值指定对象沿水平轴方向的位移。简单点
py3study
2020/01/08
2K0
DS18B20温度算法
首先程序判断温度是否是零下,如果是,则DS18B20保存的是温度的补码值,需要对其低11位(LS Byte)取反加一变成原码。
随心助手
2023/09/24
6090
DS18B20温度算法
负时序检查 Negative Timing Checks
$setuphold(reference_event, data_event, setup_limit, hold_limit, notifier, [timestamp_cond, timecheck_cond, delayed_reference_signal, delayed_data_signal]);
数字芯片社区
2022/12/18
3.5K0
负时序检查 Negative Timing Checks
当我们做后仿时我们究竟在仿些什么(四)
就像人类容易接受自然数,但对于负数缺乏某种直觉上的认识一样;后仿过程中经常出现的 Negative Delay 和 Negative Timing Check 也非常容易使人困惑。
icsoc
2020/09/29
2.1K0
当我们做后仿时我们究竟在仿些什么(四)
(4.10)James Stewart Calculus 5th Edition:Antiderivatives
如果在一个区间内 F'(x) = f(x), 则 这里 F 函数,叫做 不定积分(反导数 , anti 可以理解为 反的意思,也就是 反函数的意思)
dodo_lihao
2018/09/12
5770
(4.10)James Stewart Calculus 5th Edition:Antiderivatives
图表中包含负值的双色填充技巧
今天教大家怎么在Excel里制作带负值的双色填充图表 正负值双色填充 ▼ 通常如果数据中带负值 默认的图表输出虽然能够显示负值 但是负值颜色与正值并没有任何区别 视觉效果大打折扣 今天来教大家怎么处理
数据小磨坊
2018/04/10
2.6K0
图表中包含负值的双色填充技巧
box–shadow_shadowboxing
今天课堂上有学生问到box-shadow这个属性,那么下面我们就来详细的解说下这个属性它的用法,box-shadow是css3中的一个属性,它可以向框添加一个或多个阴影。
全栈程序员站长
2022/09/20
1.1K0
box–shadow_shadowboxing
GoTTY - 终端工具变为 Web 应用
访问 http://127.0.0.1:8080 即可在线体验 Python3 环境。
子润先生
2021/06/16
1.3K0
当车削加工时出现振刀打刀现象该如何处理?
机床在加工过程中震动,最常见于车床,镗床加工过程中,造成工件表面有颤纹,返工率、废品率高,伴有振刀打刀现象。机床振动原因一般是机床–工件–刀具三个系统中任一个或多个系统刚性不足,振动、振刀产生时,我们该从哪些方面入手排查解决这类问题。
lrglu
2022/05/16
3.5K0
当车削加工时出现振刀打刀现象该如何处理?
如何用加工中心刀具长度补偿功能
刀具补偿功能,是数控机床的一项重要功能,在准备功能中用G43、G44、G49表示,但是若使用得不好恨容易造成撞车和废品事故。下面以加工中心为例,介绍生产实践中常用的机种刀具长度补偿方法。
用户7505898
2020/08/29
1.5K0
如何用加工中心刀具长度补偿功能
点击加载更多

相似问题

整数列表的正值求和是否变为负值?

20

上一次值由负值变为正值

10

检测数据极性从正值变为负值的最佳方法?

132

查找值从正值变为负值的行,并插入空行

15

在Java中转换字节后,正值是如何变为负值的?

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文