我想把一个双精度型的数除以一个整型数。我只需要字符串格式的2个表示位的结果。就堆栈效率而言,最好的方法是什么?
double d=321321321313131233213213213213;
int i=123;
ToString(d/i); //what do I get when I do this? A double? A float?
public String ToString(float? result) //what should I cast the result?
{
return @String.Format("{0:#,0.##;} divided double by int", result);
}发布于 2012-06-16 08:23:42
ToString(d/i);//这样做会得到什么?双人份?一个浮点?
你会得到一个双倍的。将双精度除以整型将得到双精度值。
浮点型公共字符串ToString(
?结果)//我应该如何转换结果?
您将获得该值的double,因此最好在这里使用double。你永远不会得到一个可以为空的类型,也肯定不会得到一个float,所以使用float?是完全不合适的。
就堆栈效率而言,执行此操作的最佳方法是什么?
这真的不值得担心,除非,当然,你的简介,并发现这真的是一个问题。构建字符串的成本将远远高于除法运算,而且两者在性能方面都不太可能成为热点。
处理这个问题的一种干净的方法是使用double.ToString("N2"),即:
double result = d/i;
string resultAsString = result.ToString("N2");如果你想要一个完整的格式化字符串,你可以使用:
string resultAsString = string.Format("{0:N2} divided double by int", result);发布于 2012-06-16 08:23:06
好的。首先,你得到的是double,而不是 double?或float?。数学函数永远不应该返回可以为空的类型。如果您假设无穷大被表示为null,那么您就错了。无穷大是由比特决定的。您可以使用Double.IsInfinity(double)查看双精度数是否为无穷大。
[SecuritySafeCritical]
public static unsafe bool IsInfinity(double d)
{
return ((*(((long*) &d)) & 0x7fffffffffffffffL) == 0x7ff0000000000000L);
}就堆栈效率而言,执行此操作的最佳方法是什么?
我建议你看看Coding Horror上的tragedies of micro optimization。
至于函数。这是完全没有必要的。你最好的选择是Double.ToString(...)
double val = d / i;
string result = val.ToString("N2");但是,如果您使用的是String.Format(...),则可以使用:
double val = d / i;
string result = string.Format("{0:N2} divided double by int", val);发布于 2012-06-16 08:33:03
Hacky解决方案:
如果你只需要两位小数,你可以将双精度乘以100,将其转换为整数,然后除以i。
现在获取结果的字符串,并在最后两个字符之前添加一个点。
不要忘记处理负值和舍入问题的边缘情况。
如果你真的关心效率,那么与整数的除法相比,分数的除法是一个缓慢的过程。
https://stackoverflow.com/questions/11059700
复制相似问题