首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了返回一个双精度值,即使c#中的类型是双精度的,我也必须强制转换为双精度吗?

为了返回一个双精度值,即使c#中的类型是双精度的,我也必须强制转换为双精度吗?
EN

Stack Overflow用户
提问于 2009-05-19 19:48:19
回答 9查看 377关注 0票数 7

为了返回一个双精度值,即使类型是双精度的,我也必须强制转换为双精度吗?

例如:

代码语言:javascript
复制
double a = 32.34;
double b = 234.24;

double result = a - b + 1/12 + 3/12;

我必须投(替身)吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-05-19 19:51:31

不,你不需要。但是,你的表达式几乎肯定不会达到你想要的效果。

将使用整数运算来执行表达式1/12和3/12。

您可能需要:

代码语言:javascript
复制
double result = a - b + 1/12d + 3/12d;

代码语言:javascript
复制
double result = a - b + 1/(double) 12 + 3/(double) 12;

这两种方法都会强制使用浮点算法进行除法运算。

这里的问题是,如果算术运算符的两个操作数都是整数,则使用整数算术来执行操作,即使它是double类型的更大表达式的一部分。在这里,你的表达式是有效的:

代码语言:javascript
复制
double result = a - b + (1 / 12) + (3 / 12);

加法和减法是可以的,因为ab的类型迫使它们使用浮点算术来执行-但是因为除法比加法和减法“绑定得更紧密”(例如,它类似于使用上面的括号),所以只考虑直接操作数。

这有意义吗?

编辑:因为它很受欢迎,所以在这里也包含devinb的评论是有意义的:

代码语言:javascript
复制
double result = a - b + 1.0/12.0 + 3.0/12.0;

对于编译器来说,这都是一样的事情--你只需要决定哪一个对你来说更清楚:

代码语言:javascript
复制
(double) 1
1.0
1d
票数 18
EN

Stack Overflow用户

发布于 2009-05-19 19:49:41

不,不需要铸造。

票数 2
EN

Stack Overflow用户

发布于 2009-05-19 19:56:18

嗯-我解决整数除法问题的方法是这样做的:

代码语言:javascript
复制
double result = a - b + 1/12.0 + 3/12.0

不过,除了这些之外,不需要任何演员。

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

https://stackoverflow.com/questions/884686

复制
相关文章

相似问题

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