小编Ama*_*ein的帖子

为什么我不能使用int来计算字节到千兆字节?

我在当前项目中将字节转换为千兆字节时遇到了一些麻烦.最初我这样做了:

 long requiredDiskSpace = 5000000000000; // In bytes
 int gb = (int)requiredDiskSpace / 1024 / 1024 / 1024;
Run Code Online (Sandbox Code Playgroud)

该计算变为0.(正确应为4 656).然后我切换到decimal类型,像这样:

 long requiredDiskSpace = 5000000000000; // In bytes
 decimal gb = requiredDiskSpace / 1024 / 1024 / 1024;
 int gbAsInt = (int)gb;
Run Code Online (Sandbox Code Playgroud)

这个计算(正确)使gbAsInt4 656.

现在,我的问题很简单; 为什么?对我来说,计算看起来很相似,因为我对任何十进制数不感兴趣,我不明白为什么我不能在实际计算中使用int.

c#

3
推荐指数
3
解决办法
697
查看次数

如何解析版本号进行比较呢?

场景:我有一个简单的应用程序,可以检查其RSS源并查看是否有更新的版本.因此,我想检查当前版本是否小于RSS源上存在的版本.理想情况下简单如下:

CURRENTVERSION < updateVersion
Run Code Online (Sandbox Code Playgroud)

问题:版本控制由major.minor.revision.build组成,我不知道如何将其解析为一个数字来执行版本检查.

这些是要比较的参数:

#define CURRENTVERSION = 0,2,5,1
Run Code Online (Sandbox Code Playgroud)

从Web下载的版本是"0.2.6.1"(作为字符串).

检查一个是否比另一个小的最佳方法是什么?

我已经尝试将它转换为double,但值变为0.2(只有第一个.正在被解析,rest被忽略).

约束:它不能是使用.NET库的解决方案,因为当没有.NET框架时,应用程序必须工作.

(编辑)由于Karthik T的回答,我决定采用以下解决方案.

struct Version
{
    Version(string versionStr)
    {
        sscanf(versionStr.c_str(), "%d.%d.%d.%d", &major, &minor, &revision, &build);
    }

    bool operator<(const Version &otherVersion)
    {
        if(major < otherVersion.major)
            return true;
        if(minor < otherVersion.minor)
            return true;
        if(revision < otherVersion.revision)
            return true;
        if(build < otherVersion.build)
            return true;
        return false;
    }

    int major, minor, revision, build;
};
Run Code Online (Sandbox Code Playgroud)

c++ parsing version-numbering

3
推荐指数
2
解决办法
9352
查看次数

如何检测应用程序是否从DVD运行?

我正在尝试检测我们的应用程序是否从DVD运行(因为这会禁用/启用逻辑中的功能).到目前为止,我已经提出了下面的代码片段似乎可行,但我真的想知道是否有最佳实践来检测这一点.

    public static bool IsDVDInstallation()
    {
        try
        {
            string location = Assembly.GetExecutingAssembly().Location;
            var info = new DriveInfo(Path.GetPathRoot(location));
            return info.DriveType == DriveType.CDRom;
        }
        catch
        {
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# system.reflection driveinfo

2
推荐指数
1
解决办法
261
查看次数