c# - C# Math.Round 不明确的问题
问题描述
a,b 是类型long
Math.Round(a/b, (int)2)
以下方法或属性之间的调用不明确:System.Math.Round(double, int)
和System.Math.Round(double, System.MidpointRounding)
如何告诉编译器第二个参数是int
而不是System.MidpointRounding
?
编辑 1:由于某种原因,如果我在代码上单独运行,我会收到错误“ Error CS0121 The call is ambiguous between the following methods or properties: 'Math.Round(double, int)' and 'Math.Round(decimal, int)'
”,但我的原始代码作为长脚本的一部分运行,其中 a、b 是隐式类型的中间变量,并给我上面令人困惑的错误消息。
有两个正确答案:
- 使用命名参数,即
Math.Round(a/b, digits: 2)
[感谢 colinB 的评论] - 加倍(尽管这在原始错误消息中并不明显)即
Math.Round((double)a/b, 2)
[感谢欧文鲍林的回答]
解决方案
你的问题有几个问题。在编辑之前,它显示了两个属性被划分以产生第一个参数Math.Round
。我希望这些值是整数,因此您的结果不是双精度数,而是整数。整数可以隐式转换为双精度或小数。这导致了问题的第二个问题,即不明确的重载是 System.Math.Round( decimal , System.MidpointRounding)。基本上,编译器不知道你是用双精度还是小数调用重载。
您可以通过确保除法的结果是双精度来解决此问题,例如:
Math.Round(val1/(double)val2, 2);
推荐阅读
- javascript - 如何使用Javascript计算一般树中的孩子的总和
- c# - 如何通过通用类/列表循环
- android - Android Studio 图书搜索 Google API
- django - 上下文处理器:如何在所有视图中编写登录和注册
- apache - 带有注释的 Symfony 5 路由不适用于 Apache 和 Docker
- python - GraphQL 在 Django 中的一个请求中进行多个查询
- javascript - 收到响应但没有数据写入 STDOUT 或 STDERR。(代码战争)...?
- windows - 了解文件系统过滤器/微过滤器
- python - 如何在python中创建n个独立列表?
- java - Android Studio 中带参数的查询 - Room