提问人:yy uu 提问时间:6/14/2022 最后编辑:D Stanleyyy uu 更新时间:6/15/2022 访问量:192
如何强制表达式的计算类型为 double
how to enforce the evaluation type of an expression to be double
问:
我怎么能确保表达式总是被评估为双精度,即使它没有双精度,我 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types 遇到了这个网站,它说:
那么我怎样才能覆盖这个问题并确保表达式始终被计算为双精度,
我正在尝试使用 Flee 库,每当我在其中放入一个分数(4/3)时,它都会将其处理为整数,甚至不是浮点数,这会破坏整个计算,所以我必须解决这个问题,
如果我尝试使用以下表达式,它会起作用
(4.0/3) 或 (4/3.0) = 1.33333 故障情况如下 (4/3) = 1 希望我的解释很清楚
答:
1赞
emagers
6/14/2022
#1
正如文档中提到的,这是该语言的一个特性。您始终可以将分子或分母转换为浮点数或双精度值,这将以相同类型的结果结束:
int a = 4;
int b = 3;
double result = (double)a / b;
评论
0赞
yy uu
6/15/2022
这效果很好,但是当我将它与 Flee 库一起使用时,它会崩溃,因为我试图允许用户输入包含变量的数学表达式,Flee 的解析器将 d 视为变量并崩溃,我正在考虑一种解决方案,可以使所有数学计算以双倍方式完成,例如完全取消整数除法。
0赞
Hervé
6/14/2022
#2
解决方案 1
使用 double 注释,它告诉编译器该数字实际上是双精度
4d / 3
(d 表示双精度,也适用于使用 f 的浮点数)
解决方案 2
使用显式强制转换
(double)4 / 3
评论
0赞
yy uu
6/15/2022
这效果很好,但是当我将它与 Flee 库一起使用时,它会崩溃,因为我试图允许用户输入包含变量的数学表达式,Flee 的解析器将 d 视为变量并崩溃,我正在考虑一种解决方案,可以使所有数学计算以双倍方式完成,例如完全取消整数除法。
1赞
yy uu
6/15/2022
#3
我设法通过强制 Flee Library 不再将任何给定的输入视为整数来解决这个问题,我通过编写以下代码来做到这一点:
ExpressionContext context = new ExpressionContext();
context.Options.IntegersAsDoubles = true;
祝大家好运
下一个:检查三次方程的根是否复数?
评论