C#当我将字节转换为兆字节时,如何缩短我的双精度?

C#当我将字节转换为兆字节时,如何缩短我的双精度?,c#,double,byte,megabyte,C#,Double,Byte,Megabyte,您好,我制作了一个下载更新文件的更新程序,但我现在总是使用字节作为指示我找到了一种将其转换为兆字节的方法, 它工作得很好,但有一个小问题,它返回的数字很大,例如, 20MB的文件将显示为:20.264967724167345MB 如何使这个数字短一些,比如20.26MB 这是将其转换为mb的代码: static double B2MB(long bytes) { return (bytes / 1024f) / 1024f; } 20.2649677

您好,我制作了一个下载更新文件的更新程序,但我现在总是使用字节作为指示
我找到了一种将其转换为兆字节的方法,

它工作得很好,但有一个小问题,它返回的数字很大,例如,
20MB的文件将显示为:20.264967724167345MB

如何使这个数字短一些,比如20.26MB

这是将其转换为mb的代码:

    static double B2MB(long bytes)
    {
        return (bytes / 1024f) / 1024f;
    }

20.264967724167345不是一个很大的数字。才20多。这是一个很长的文本表示,但那是另一回事

您需要查看显示号码的位置。例如,您可能希望使用:

Console.WriteLine("{0:0.##}MB", value);


有关更多详细信息,请参阅和。

20.264967724167345不是一个很大的数字。才20多。这是一个很长的文本表示,但那是另一回事

您需要查看显示号码的位置。例如,您可能希望使用:

Console.WriteLine("{0:0.##}MB", value);


有关详细信息,请参阅和。

您可以使用Math.round对指定数字进行舍入。如果您想要两个,就像在本例中一样,可以这样使用:
Math.Round(inputValue,2)。您的代码如下所示:

static double B2MB(long bytes)
{
    return Math.Round((bytes / 1024f) / 1024f, 2);
}

注意:由于浮点数没有无限精度,这可能导致类似24.24999999999999的结果,而不是24.25。此方法值得了解,但如果您将其作为字符串输出,则应该像其他答案一样使用格式化字符串。

您可以使用Math.round对指定数字进行舍入。如果您想要两个,就像在本例中一样,可以这样使用:
Math.Round(inputValue,2)。您的代码如下所示:

static double B2MB(long bytes)
{
    return Math.Round((bytes / 1024f) / 1024f, 2);
}

注意:由于浮点数没有无限精度,这可能导致类似24.24999999999999的结果,而不是24.25。此方法值得了解,但如果您将其作为字符串输出,则应像其他答案一样使用格式化字符串。

要在显示中使用此方法,您可以始终使用
string.Format
方法,如下所示:

string mb = String.Format("{0:F2}MB", B2MB(bytes));
如果只是四舍五入,您可以使用

Math.Round((bytes / 1024f) / 1024f, 2);

要在显示中使用它,您可以始终使用
String.Format
方法,如下所示:

string mb = String.Format("{0:F2}MB", B2MB(bytes));
如果只是四舍五入,您可以使用

Math.Round((bytes / 1024f) / 1024f, 2);

为什么要尽早丢失数据?只有文本表示需要截断,所以在我看来,OP从
double
转换为
string
时,他应该进行更改。如果他存储这个值,那么我同意,尽早丢失数据不是一个好办法。然而,他完全有可能希望立即使用数据,或者使用控制台以外的其他东西。无论哪种情况,这都应该有助于他做到这一点。OP比我们更了解他的情况,所以让他有多个选择可能是最好的。更新程序是一个windows窗体应用程序,下载后直接使用该文件,许多人喜欢有清晰的简单数字(更新程序是为我与一些朋友创建的一个新游戏准备的)字符串格式也可以取整,而不仅仅是截断。我觉得这根本是错的——它不像
数学。Round
甚至可以返回正好有两个十进制数字的值。它可以返回与该值最接近的
double
值,但这不是一回事。(如果您建议使用
decimal
代替并四舍五入,在我看来这会更好。)我个人认为区分逻辑上与值本身有关的操作和实际上仅与文本转换有关的操作很重要。这对我来说更像是后者。我不知道字符串的格式,谢谢你提供的信息。我编辑了我的帖子,说你的答案应该优先用于字符串转换。为什么要尽早丢失数据?只有文本表示需要截断,所以在我看来,OP从
double
转换为
string
时,他应该进行更改。如果他存储这个值,那么我同意,尽早丢失数据不是一个好办法。然而,他完全有可能希望立即使用数据,或者使用控制台以外的其他东西。无论哪种情况,这都应该有助于他做到这一点。OP比我们更了解他的情况,所以让他有多个选择可能是最好的。更新程序是一个windows窗体应用程序,下载后直接使用该文件,许多人喜欢有清晰的简单数字(更新程序是为我与一些朋友创建的一个新游戏准备的)字符串格式也可以取整,而不仅仅是截断。我觉得这根本是错的——它不像
数学。Round
甚至可以返回正好有两个十进制数字的值。它可以返回与该值最接近的
double
值,但这不是一回事。(如果您建议使用
decimal
代替并四舍五入,在我看来这会更好。)我个人认为区分逻辑上与值本身有关的操作和实际上仅与文本转换有关的操作很重要。这对我来说更像是后者。我不知道字符串的格式,谢谢你提供的信息。我编辑了我的帖子,说你的答案应该是字符串转换的首选。F2代表固定点2。它将数字四舍五入为小数点后两位的固定值。我想稍后我会在学到更多内容后再看这个。谢谢。F2代表固定点2。它将数字四舍五入为小数点后两位的固定值。我想稍后我会在学到更多内容后再看这个。无论如何,谢谢你。