Как Вы читаете плавающие числа (РЕАЛЬНЫЕ) из sqlite базы данных по iPhone?

сетевая версия ОС

с практическими рекомендациями VB:

Public Function GetOSVersion() As String
    Select Case Environment.OSVersion.Platform
        Case PlatformID.Win32S
            Return "Win 3.1"
        Case PlatformID.Win32Windows
            Select Case Environment.OSVersion.Version.Minor
                Case 0
                    Return "Win95"
                Case 10
                    Return "Win98"
                Case 90
                    Return "WinME"
                Case Else
                    Return "Unknown"
            End Select
        Case PlatformID.Win32NT
            Select Case Environment.OSVersion.Version.Major
                Case 3
                    Return "NT 3.51"
                Case 4
                    Return "NT 4.0"
                Case 5
                    Select Case _
                        Environment.OSVersion.Version.Minor
                        Case 0
                            Return "Win2000"
                        Case 1
                            Return "WinXP"
                        Case 2
                            Return "Win2003"
                    End Select
                Case 6
                    Select Case _
                        Environment.OSVersion.Version.Minor
                        Case 0
                            Return "Vista/Win2008Server"
                        Case 1
                            Return "Win7/Win2008Server R2"
                        Case 2
                            Return "Win8/Win2012Server"
                        Case 3
                            Return "Win8.1/Win2012Server R2"
                    End Select
                Case 10  //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used
                  Return "Windows 10"
                Case Else
                    Return "Unknown"
            End Select
        Case PlatformID.WinCE
            Return "Win CE"
    End Select
End Function

C#

public string GetOSVersion()
{
  switch (Environment.OSVersion.Platform) {
    case PlatformID.Win32S:
      return "Win 3.1";
    case PlatformID.Win32Windows:
      switch (Environment.OSVersion.Version.Minor) {
        case 0:
          return "Win95";
        case 10:
          return "Win98";
        case 90:
          return "WinME";
      }
      break;

    case PlatformID.Win32NT:
      switch (Environment.OSVersion.Version.Major) {
        case 3:
          return "NT 3.51";
        case 4:
          return "NT 4.0";
        case 5:
          switch (Environment.OSVersion.Version.Minor) {
            case 0:
              return "Win2000";
            case 1:
              return "WinXP";
            case 2:
              return "Win2003";
          }
          break;

        case 6:
          switch(Environment.OSVersion.Version.Minor) {
            case 0:
              return "Vista/Win2008Server";
            case 1:
              return "Win7/Win2008Server R2";
            case 2:
              return "Win8/Win2012Server";
            case 3:
              return "Win8.1/Win2012Server R2";
          }
          break;
        case 10:  //this will only show up if the application has a manifest file allowing W10, otherwise a 6.2 version will be used
          return "Windows 10";
      }
      break;

    case PlatformID.WinCE:
      return "Win CE";
  }

  return "Unknown";
}

5
задан Ralph Willgoss 1 October 2012 в 22:31
поделиться

3 ответа

Целого числа с плавающей запятой не существует. Они являются взаимоисключающими на фундаментальном уровне (ну, числа с плавающей запятой могут попадать на целочисленные границы, но вы поняли идею): P.

Но способ избавиться от чисел с плавающей запятой - использовать sqlite3_column_double (sqlite3_stmt *, int) функция.

NSNumber *f = [NSNumber numberWithFloat:(float)sqlite3_column_double(stmt, col)];
13
ответ дан 18 December 2019 в 08:29
поделиться

Объявить поля как числа с плавающей запятой. Из документа sqllite datatype doc тип базы данных REAL. Это 8-байтовое число с плавающей запятой, которое является типом Objective-C double, NSDouble или NSNumber.

5
ответ дан 18 December 2019 в 08:29
поделиться

For additional information, sqlite3 uses a dynamic data type system. so anything past these:

  • NULL
  • INTEGER
  • REAL
  • TEXT
  • BLOB

are just hints to sqlite (technically, affinity), and it'll end up deciding on its own what type it is or is not.

http://www.sqlite.org/datatype3.html

the functions that return doubles, ints, etc are part of the sqlite C API try its best to give you what you want.... so what's stored in a column can potentially be converted by sqlite if what you're asking for is different from what's in the db.

http://www.sqlite.org/c3ref/column_blob.html

about midway down, there's a handy table that'll let you know what to expect.

-1
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: