【问题标题】:Error CS0019: Operator '*' cannot be applied to operands of type 'decimal' and 'double' (CS0019)错误 CS0019:运算符“*”不能应用于“十进制”和“双精度”类型的操作数 (CS0019)
【发布时间】:2021-06-18 21:16:48
【问题描述】:

我想在double? 的一个对象上使用 Math.Round 函数。我尝试转换为十进制,然后使用 math.round 函数,但收到此错误:

错误 CS0019:运算符“*”不能应用于“十进制”和“双精度”类型的操作数 (CS0019) (WeatherLocationInfo)

我的代码是:

double? wSpeedInputFirstDay = weatherBindingData.WeatherDataForecastHourly.List[0].WindForecast.WindForecastValue;
decimal wSpeedOutPutFirstDay = Convert.ToDecimal(wSpeedInputFirstDay);

string wSpeedFirstDay = $"{Math.Round(wSpeedOutPutFirstDay) * 3.6:0}km/h";

当我尝试直接将 Math.Round 与 double 一起使用时?像这样的对象:

double? wSpeedInputFirstDay = weatherBindingData.WeatherDataForecastHourly.List[0].WindForecast.WindForecastValue;

string wSpeedFirstDay = $"{Math.Round(wSpeedInputFirstDay) * 3.6:0}km/h";

我收到此错误:

错误 CS1503:参数 1:无法从“双精度”转换?到“十进制” (CS1503) (WeatherLocationInfo)

double?对象上使用函数Math.Round的正确方法是什么?

【问题讨论】:

  • C# 仅对整数类型(int 等)实现对 decimal 的内置提升。如果您想在同一语句中对 doubledecimal 执行数学运算,则必须显式转换。

标签: c#


【解决方案1】:

首先:Math.Round 将输出 doubledecimal,具体取决于输入。在第一个示例中,它返回十进制,因为 wSpeedOutPutFirstDay 是一个。第二个,wSpeedInputFirstDay 被声明为double?,所以它的输出加倍。

也就是说,您声明 3.6 值的方式定义了它输出的类型。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types#real-literals

如果您想将3.6 声明为decimal,请像这样使用它:3.6m3.6M。如果您希望 3.6 成为 float,请使用 3.6F。以您的方式声明它 (3.6) 将其键入为 double

编译器抛出异常的原因是没有内置的* 运算符可以接受两种不同的类型。除非您添加它们,否则最好的选择是对两个值使用相同的类型。

【讨论】:

    【解决方案2】:

    你可以这样试试。

    double? wSpeedInputFirstDay =weatherBindingData.WeatherDataForecastHourly.List[0].WindForecast.WindForecastValue;
    decimal wSpeedOutPutFirstDay = Convert.ToDecimal(wSpeedInputFirstDay);
    string wSpeedFirstDay = $"{Math.Round(wSpeedOutPutFirstDay) * 3.6m:0}km/h";
    

    【讨论】:

    • 如果 OP 不知道,更改为 3.6 -> 3.6m,其中 m 表示 decimal 文字。
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多