veccy
veccy

Reputation: 925

string to int currency formatting

When there is a string value such as 3.76 how can this be converted into a int cent value in this case 376.

I was thinking of using sprintf to remove the dot then convert to int but can't work out the syntax. How would I do this and is it the best way

Upvotes: 2

Views: 1432

Answers (4)

Mario Menger
Mario Menger

Reputation: 5902

Removing the dot only works if you always have two decimals, i.e. fine for "3.76", but not for "3.7" or even "3".

  • "3.76" => 376
  • "3.7" => 37 instead of 370
  • "3" => 3 instead of 300

Best solution might be to convert it to a float first, then multiply by 100 and only then turn it into an int using round. If you can have more then 2 decimals you'll need to decide on a rounding scheme. For instance:

("3.76".to_f * 100.0).round

Note that converting from a float to an int using to_i isn't accurate, as mentioned by Clint in a comment to this answer.

Upvotes: 0

Bitterzoet
Bitterzoet

Reputation: 2792

I think this is a bit more ruby-ish instead of calilng Integer(cent) and doing weird substitutions.

(cent * 100).to_i

Upvotes: -1

Max Kielland
Max Kielland

Reputation: 5841

I assume you mean ANSI C and have a string value that you would like to convert into an int.

int cents = (atof(myString) * 100.0);

atof converts a string to a double (or float depending on compiler and platform), then just multiply with 100 to move the decimal pointer two steps right.

very simple :)

Upvotes: 0

ennuikiller
ennuikiller

Reputation: 46985

removing the dot is rather easy:

cent.gsub!(/\./,"")

will remove the dot.

To get an int, simply call the integer constructor:

Integer(cent)

Of course you can combined the two operations:

Integer(cent.gsub!(/\./,""))

Upvotes: 2

Related Questions