gpt4 book ai didi

c# - 带小数的乘法和除法

转载 作者:太空狗 更新时间:2023-10-29 22:59:10 32 4
gpt4 key购买 nike

我是 C# 的新手,现在遇到数学方面的问题。为什么我不能像这样对“简单”进行多重复制或划分:

 decimal mLon1 = 0;
decimal mLat1 = 0;
decimal mFactor = 111021;
decimal mRadius = 100;
decimal mLat = 12.123;

mLon1 = mLon - mRadius / Math.Abs(Math.Cos(((Math.PI / 180) * mLat)) * mFaktor);
mLat1 = mLat - (mRadius / mFaktor);

编译器显示错误:

The Operator '*' can not be applied to operands of type 'double' and 'decimal'.

与运算符 '/' 相同 ...

如何让我的代码正常工作?感谢任何提示。

最佳答案

C# 是一种类型安全语言,我所说的类型安全是指代码允许开发人员确定某个值或对象属于某种类型,以便他/她可以以特定方式使用它而不用担心意外或未定义的行为。C# 只有一些类型的隐式转换,如 int 到 double

如下所示更改您的代码

decimal mLon1 = 0M;
decimal mLat1 = 0M;
decimal mFactor = 111021M;//mFactor is never used
decimal mRadius = 100M;
decimal mLat = 12.123M;

mLon1 = mLon - mRadius / Math.Abs(Convert.ToDecimal(Math.Cos((Math.PI / 180) * Convert.ToDouble(mLat))) * mFaktor);//mFaktor and mLon is not defined
mLat1 = mLat - (mRadius / mFaktor);

此处 Convert.ToDouble(mLat)mLat 转换为 double 因为 C# 不允许隐式转换 decimaldouble,我为什么要这样做?好吧,Math.Cos 显然只接受 doubleMath.Abs​​

也是如此

另一种解决方法是,您可以将每个声明的变量转换为 double 并减少两者之间显式类型转换的痛苦

double mLon1 = 0D;
double mLat1 = 0D;
double mFactor = 111021D;//mFactor is never used
double mRadius = 100D;
double mLat = 12.123D;

mLon1 = mLon - mRadius / Math.Abs(Math.Cos(((Math.PI / 180D) * mLat)) * mFaktor);//mFaktor and mLon is not defined
mLat1 = mLat - (mRadius / mFaktor);

请参阅下面提到的引用资料以及您要在当前面临的场景中使用什么类型。

Floating point reference

引用:MSDN

关于c# - 带小数的乘法和除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22680600/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com