所以这种奇怪的行为是在我们正在实施的单元测试中被发现的。
在 .NET Core 3.x 中,如果将接近 0 的负数四舍五入然后转换为字符串,则该字符串将显示“-0”而不是 0。
Framework 和 .NET Core 2.x 不会表现出这种行为。
double d = -.1;
Console.WriteLine(Math.Round(d,0));
Run Code Online (Sandbox Code Playgroud)
这是 Core 中的一个新错误,还是一些奇怪的有意更改?
我有一个目前使用.NET 4.0构建并部署到Nuget的库.该库没有很多依赖项,似乎在.NET Standard和Core项目中也能很好地工作.
手动添加到标准或核心项目时,库会引发兼容性错误.通过修改.csproj文件以删除不需要的引用来解决此问题.它现在看起来像这样.
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这似乎解决方案似乎使核心和标准的库功能正确.当手动将库添加到Standard或Core项目时,兼容性警告现在已经消失,即使该库仍使用.NET 4.0构建.但是,在发布到Nuget,然后通过Nuget下载库后,我仍然收到此警告.
"警告****包'******'使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'.NETCoreApp,Version = v2.0'恢复.此包可能不是与您的项目完全兼容."
在经历了很多烦恼和调查之后,我意识到该库似乎仍然适用于标准和核心项目,但我不确定它是否使用.NET 4.6.1来实际运行基于此警告的库.
所以我的问题是,如何正确地将程序包部署到Nuget以正确定位多个运行时?我是否需要在每个运行时中构建多个项目?如果是这样,我可以将其打包为一个包仍然,或者我是否需要为每个运行时使用不同的版本?不确定这里的最佳做法是什么.
以下问题在C#和Javascript之间返回不同的结果:
JS结果= 0.6987590698013918
C#Result = 0.697932453616849
使用Javascript
mu =0.6962788561718957;
e1= 0.0016792203861749964;
phi1 = mu + e1 * (3 / 2 - 27 * e1 * e1 / 32) * Math.sin(2 * mu) + e1 * e1 * (21 / 16 - 55 * e1 * e1 / 32) * Math.sin(4 * mu);
Run Code Online (Sandbox Code Playgroud)
C#
double mu = 0.6962788561718957;
double e1 = 0.0016792203861749964;
double phi1 = mu + e1 * (3 / 2 - 27 * e1 * e1 / 32) * …Run Code Online (Sandbox Code Playgroud) javascript c# math arithmetic-expressions operator-precedence