Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Database & SysAdmin
  3. Database
  4. Floating Point Numbers Stored as Text with Integration Services

Floating Point Numbers Stored as Text with Integration Services

Scheduled Pinned Locked Moved Database
helpquestion
2 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    moon_stick
    wrote on last edited by
    #1

    I've encountered an unusual situation in an import program I wrote. From what I can determine, the root of the problem is that I read data from an Excel spreadsheet (through a data conversion component which changes all data types to DT_STR) into an unconstrained table (no FK's, all columns are varchar(255)). For some reason, on occasion currency values are imported with what I assume is their floating point representation. Confusingly, this doesn't appear to be consistent behaviour in a given file. e.g. 10098.73 -> 10098.73 but 8978.98 -> 8978.9799999999996. In a second package, the data is imported into a correctly typed table (there's a few lookups etc done along the way too). The type of the currency column is numeric(15,2) but I don't seem to be able to catch the data truncation as it is reported as a data overflow instead and I don't want to ignore the error completely in case e.g. text has been entered instead of a number. I'm assuming the easier way to go is to figure out why the numbers are occasionally stored as floating point in text - can anyone shed any light? Failing that, I might just write a SPROC that will truncate the text automatically...!! :)

    It definitely isn't definatley

    L 1 Reply Last reply
    0
    • M moon_stick

      I've encountered an unusual situation in an import program I wrote. From what I can determine, the root of the problem is that I read data from an Excel spreadsheet (through a data conversion component which changes all data types to DT_STR) into an unconstrained table (no FK's, all columns are varchar(255)). For some reason, on occasion currency values are imported with what I assume is their floating point representation. Confusingly, this doesn't appear to be consistent behaviour in a given file. e.g. 10098.73 -> 10098.73 but 8978.98 -> 8978.9799999999996. In a second package, the data is imported into a correctly typed table (there's a few lookups etc done along the way too). The type of the currency column is numeric(15,2) but I don't seem to be able to catch the data truncation as it is reported as a data overflow instead and I don't want to ignore the error completely in case e.g. text has been entered instead of a number. I'm assuming the easier way to go is to figure out why the numbers are occasionally stored as floating point in text - can anyone shed any light? Failing that, I might just write a SPROC that will truncate the text automatically...!! :)

      It definitely isn't definatley

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #2

      moon_stick wrote:

      I'm assuming the easier way to go is to figure out why the numbers are occasionally stored as floating point in text - can anyone shed any light?

      Because $2 divided by three people equals something that's hard to store in binary. It results in 0.666666~, where the length of a byte is limited. A digital representation of a analogue value :) Excell sometimes keeps the "calculated" values without rounding them. Those values are already imprecise, since you can't encode every fraction using a byte. It keeps the unrounded value around, and displays a value with the specified formatting: in this case, a currency with two positions after the decimal-separator. It would be easier to test whether the data can be interpreted as a numeric, and if so, round it by two decimals. Keep in mind that you don't want to use these (formatted) numbers for further calculations; you'd want the original floats for that :)

      I are Troll :suss:

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups