         case .datatype("http://www.w3.org/2001/XMLSchema#string"):
             let escaped = value.replacingOccurrences(of:"\"", with: "\\\"")
             return "\"\(escaped)\""
-        case .datatype("http://www.w3.org/2001/XMLSchema#integer"), .datatype("http://www.w3.org/2001/XMLSchema#float"), .datatype("http://www.w3.org/2001/XMLSchema#decimal"), .datatype("http://www.w3.org/2001/XMLSchema#boolean"):
+        case .datatype("http://www.w3.org/2001/XMLSchema#float"):
+            let s = "\(value)"
+            if s.contains("e") {
+                return s
+            } else {
+                return "\(s)e0"
+            }
+        case .datatype("http://www.w3.org/2001/XMLSchema#integer"), .datatype("http://www.w3.org/2001/XMLSchema#decimal"), .datatype("http://www.w3.org/2001/XMLSchema#boolean"):
             return "\(value)"
         case .datatype(let dt):
             let escaped = value.replacingOccurrences(of:"\"", with: "\\\"")

        switch type {
        case .datatype("http://www.w3.org/2001/XMLSchema#integer"):
            return Double(value) ?? 0.0
        case .datatype("http://www.w3.org/2001/XMLSchema#float"), .datatype("http://www.w3.org/2001/XMLSchema#decimal"):
            return Double(value) ?? 0.0
        default:
            fatalError()

    public init(float value: Double) {
        self.value = "\(value)"
        self.type = .datatype("http://www.w3.org/2001/XMLSchema#float")
    }
    
    public init?(numeric value : Double, type : TermType) {
        self.type = type
        switch type {
        case .datatype("http://www.w3.org/2001/XMLSchema#float"),
             .datatype("http://www.w3.org/2001/XMLSchema#double"):
            self.value = "\(value)"
        case .datatype("http://www.w3.org/2001/XMLSchema#decimal"):
            self.value = String(format: "%f", value)
        case .datatype("http://www.w3.org/2001/XMLSchema#integer"):
            let i = Int(value)
            self.value = "\(i)"
        default:
            return nil
        }
    }
    
    var value : String
