首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效划分

高效划分
EN

Stack Overflow用户
提问于 2012-06-16 08:19:42
回答 3查看 220关注 0票数 1

我想把一个双精度型的数除以一个整型数。我只需要字符串格式的2个表示位的结果。就堆栈效率而言,最好的方法是什么?

代码语言:javascript
复制
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);
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-16 08:23:42

ToString(d/i);//这样做会得到什么?双人份?一个浮点?

你会得到一个双倍的。将双精度除以整型将得到双精度值。

浮点型公共字符串ToString(

?结果)//我应该如何转换结果?

您将获得该值的double,因此最好在这里使用double。你永远不会得到一个可以为空的类型,也肯定不会得到一个float,所以使用float?是完全不合适的。

就堆栈效率而言,执行此操作的最佳方法是什么?

这真的不值得担心,除非,当然,你的简介,并发现这真的是一个问题。构建字符串的成本将远远高于除法运算,而且两者在性能方面都不太可能成为热点。

处理这个问题的一种干净的方法是使用double.ToString("N2"),即:

代码语言:javascript
复制
double result = d/i;
string resultAsString = result.ToString("N2");

如果你想要一个完整的格式化字符串,你可以使用:

代码语言:javascript
复制
string resultAsString = string.Format("{0:N2} divided double by int", result);
票数 5
EN

Stack Overflow用户

发布于 2012-06-16 08:23:06

好的。首先,你得到的是double而不是 double?float?。数学函数永远不应该返回可以为空的类型。如果您假设无穷大被表示为null,那么您就错了。无穷大是由比特决定的。您可以使用Double.IsInfinity(double)查看双精度数是否为无穷大。

代码语言:javascript
复制
[SecuritySafeCritical]
public static unsafe bool IsInfinity(double d)
{
    return ((*(((long*) &d)) & 0x7fffffffffffffffL) == 0x7ff0000000000000L);
}

就堆栈效率而言,执行此操作的最佳方法是什么?

我建议你看看Coding Horror上的tragedies of micro optimization

至于函数。这是完全没有必要的。你最好的选择是Double.ToString(...)

代码语言:javascript
复制
double val = d / i;
string result = val.ToString("N2");

但是,如果您使用的是String.Format(...),则可以使用:

代码语言:javascript
复制
double val = d / i;
string result = string.Format("{0:N2} divided double by int", val);
票数 2
EN

Stack Overflow用户

发布于 2012-06-16 08:33:03

Hacky解决方案:

如果你只需要两位小数,你可以将双精度乘以100,将其转换为整数,然后除以i。

现在获取结果的字符串,并在最后两个字符之前添加一个点。

不要忘记处理负值和舍入问题的边缘情况。

如果你真的关心效率,那么与整数的除法相比,分数的除法是一个缓慢的过程。

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

https://stackoverflow.com/questions/11059700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档