繁体   English   中英

从 func 获取 Int 或 Double 而不转换

Getting Int or Double from func without converting

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在我的应用程序中,我有一个返回 int 或 double 的函数。 将 Int 转换为 Double 可能不应该有任何问题,但我想知道是否有办法在没有特定转换的情况下实现它。

我有以下代码,我想开始工作,但无法这样做。

struct FuncEquatableView: View {
   let int = 25
   let double = 30.0
   
   var body: some View {
       Text("\(returnEquatable())")
   }

   func returnEquatable<T: Equatable>(returnInt: Bool = true) -> T {
       if returnInt {
           return int as! T
       }
       else {
           return double as! T
       }
   }
}
1 个回复

对于您描述的用例,此解决方案是返回一个字符串:

func returnEquatable(returnInt: Bool = true) -> String {
    if returnInt {
        return "\(int)"
    }
    else {
        return "\(double)"
    }
}

如果您有一个值希望是 Int 或 Double,那就是“或”类型(正式名称是“sum 类型”)。 那是一个枚举。 此枚举可能适用于您的目的; 它有很多小问题,但可能就足够了。 此表单允许您检查是否相等或对一组值进行排序。 (请记住,并非每个 Int 都可以表示为 Double,因此非常大的 Int 将彼此相等。)

enum Value: Comparable, CustomStringConvertible {
    case int(Int)
    case double(Double)

    // NOTE: This is lossy for non-integers
    var intValue: Int {
        switch self {
        case .int(let x): return x
        case .double(let x): return Int(x)
        }
    }

    // NOTE: This is lossy for large integers
    var doubleValue: Double {
        switch self {
        case .int(let x): return Double(x)
        case .double(let x): return x
        }
    }

    static func == (lhs: Value, rhs: Value) -> Bool {
        // NOTE: This does not work for large integers
        lhs.doubleValue == rhs.doubleValue
    }

    static func < (lhs: Value, rhs: Value) -> Bool {
        // NOTE: This does not work for large integers
        lhs.doubleValue < rhs.doubleValue
    }

    var description: String {
        switch self {
        case .int(let x): return x.description
        case .double(let x): return x.description
        }
    }
}

然后你的returnEquatable将是:

func returnEquatable(returnInt: Bool = true) -> Value {
    if returnInt {
        return .int(int)
    }
    else {
        return .double(double)
    }
}

请注意,在这种情况下您需要逐字文本,而不是本地化键:

    Text(verbatim: "\(returnEquatable())")

不过,我怀疑这是矫枉过正,而且您的实际问题看起来像第一个答案,或者更简单。

2 如何对double和int进行转换

我有两个变量: 我想将i1除以100,以便得到0.1,然后再加上d1。 这是我尝试过的东西 i1 = i1/100 result is 0 i1 = (int) ((double)i1/100); result is 0 我尝试了更多类似的事情,但是结果为0或2。 ...

2017-08-03 06:48:16 4 44   java
3 如何将表达式语言(EL)的double或float值转换为int而不进行舍入?

我在JSP中使用表达式语言(EL)。 如你所见,我正在计算不。 需要显示x的页面。 每页的结果。 从第2行开始,这不能一直工作,即formatNumber标签是我的除法结果的四舍五入,我不想四舍五入。 即对于73个记录,每页20个需要4页,但我得到结果5,因为在第2行它是 ...

6 将float转换为int而不进行任何转换?

我通过手动转换和移动值将各种类型写入字节流。 我发现这比使用BitConverter或BinaryWriter快三倍。 我的问题是花车。 我需要将它们转换为int以便对它们执行移位操作,但是任何转换为​​int都将导致带截断的隐式转换等。我希望保持精确的二进制表示相同。 这可能吗? ...

8 Linq to entity:加入string和int而不进行转换

我有2个表:一个表有一个nvarchar列,其格式如下:“Type | Id(或GUID)”。 如果列的类型是“Table2”而第二部分是整数,那么table是具有在第一个表中引用的主键。 所以我加入这些表的第一次尝试是: 然而,这需要永远执行。 在profiler中检查查询, ...

9 将scanf字符转换为int而不进行转换

如何使用scanf扫描整数个字符并将其简单地填充为无符号int而不进行转换? 举个例子,我有以下输入字符(为了方便查看,我将它们用十六进制表示): 我想要前4个(因为int适合4个char)。 以10为底(十进制)等于221018(大端)。 大! 那就是我想要的int。 这 ...

2014-09-25 11:24:18 1 206   c/ scanf
10 C#-将对象转换为int而不进行转换

我有一个方法,该方法根据给定的列(数据库类)返回一种对象。 但是,当我分配对象时,编译器将引发错误,提示它无法将对象类型隐式转换为int。 如何在不进行转换的情况下进行转换? 看起来更好: 但是现在我必须包含一个强制转换,这使得代码不那么干净,更难编码: 这是我的代码: ...

2015-03-21 07:44:00 4 165   c#
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM