为什么我在set方法C#中不能使用Math.round

时间:2017-04-12 07:51:06

标签: c# .net

Math.round

为什么我在set方法中不能使用const WebSocket = require('ws'); const wss = new WebSocket.Server({port: 8080}); wss.on("connection", function connection(ws) { ws.on('message,', function incoming(message) { console.log('received: %s', message); }); ws.send("something"); }); ?它说:

  

论据'#1'无法转换小数?'表达式键入' double'

3 个答案:

答案 0 :(得分:3)

Math.Round适用于十进制,不可为十进制的小数。请改用Math.Round(xposition.Value, 4)。另请注意,必须将此值指定为有用,或许您打算执行以下操作:

private decimal? xposition;
public decimal? XPosition
{
    get
    {
        return this.xposition;
    }
    set
    {
        this.xposition = value.HasValue ? Math.Round(value.Value, 4) : null;
    }
}

答案 1 :(得分:2)

Math.Round返回舍入值,它不会修改传递的值。因此,您必须将返回值分配给后备字段xposition

xposition = Math.Round(value, 4);

但是因为它是可空的,你必须处理它可以为空的情况,你必须将其转换为Math.Round的十进制:

public decimal? XPosition
{
    get
    {
        return this.xposition;
    }

    set
    {
        this.xposition = value == null ? (decimal?)null : Math.Round(value.Value, 4);
    }
}

答案 2 :(得分:0)

您的代码存在一些问题。

  • 首先,您应该使用可以为.Value的{​​{1}}。
  • 其次,在使用之前,您应该检查该值是否为decimal
  • 第三,你应该分配结果。

我会使用这段代码:

null