C# 将十进制转换为精度较低的整数作为字符串

C# 将十进制转换为精度较低的整数作为字符串,c#,formatting,C#,Formatting,因为有些人显然认为千兆字节作为十进制是准确存储可用存储空间的好方法,所以我现在有以下代码将其转换为字节表示: Convert.ToString(Convert.ToInt64(Math.Floor(someDecimal * 1024 * 1024))); 现在,虽然它可以工作(如在中返回预期结果),但它并不十分优雅 有没有更优雅的方式来进行这种转换?(地板是必要的)。为什么不使用这个: var result = ((Int64)(someDecimal * 1024 * 1024 * 102

因为有些人显然认为千兆字节作为十进制是准确存储可用存储空间的好方法,所以我现在有以下代码将其转换为字节表示:

Convert.ToString(Convert.ToInt64(Math.Floor(someDecimal * 1024 * 1024)));
现在,虽然它可以工作(如在中返回预期结果),但它并不十分优雅


有没有更优雅的方式来进行这种转换?(地板是必要的)。

为什么不使用这个:

var result = ((Int64)(someDecimal * 1024 * 1024 * 1024)).ToString();

当然,这应该封装在一些助手方法中。您不希望在代码中出现这种情况。

考虑将这一行移动到单独的方法(例如,
gigabytesToBytes(someDecimal)
)。这将使您的意图更加清晰,如果您发现bug(如评论中发现的bug),您可以在一个地方修复它们。

尝试:

(someDecimal * Math.Pow(1024,3) - 0.5m).ToString("F0")

1024^2代表兆字节,而不是千兆字节。如果
someDecimal
真的包含GB,这将为您提供千字节表示。关于千字节的事情,你们是对的。谢谢我想编码的时候不要睡觉。里克:因为四舍五入(我理解Convert.ToInt64会有非常糟糕的副作用,所以在谨慎方面出错。:)您可能想使用
long
思想,因为我不确定显式强制转换是取整还是截断?也不知道Math.Pow,或者乘以一个常数是否会有显著的性能提升?我愿意接受建议。@Fuex:该编辑无效。我贴了别的东西!您没有改进代码,而是使其可能变慢。永远不要在编辑中进行这样的更改@MikkelLøkke:我不会使用Math.Pow来完成这个任务,因为它可能会比较慢。我会使用一个常量,可以像我的示例中那样内联使用,也可以在某个常量持有者类中声明。@Daniel很抱歉,我不想犯这个错误。谢谢,我已经犯了,尽管我承认你对方法名称的建议比我现在所说的“WhattheHellishourwithYou(someDecimal)”要好。:)