Hi All,

I want to get the percentage result based from two values,

```
dim a,b,c as Integer
a=1000000
b=-125000
c=(b/a)*100
MsgBox str(c)
```

The result is -12, how to get the result for 12.5%

any helps?

Thanks

Regards,

Arief

Hi All,

I want to get the percentage result based from two values,

```
dim a,b,c as Integer
a=1000000
b=-125000
c=(b/a)*100
MsgBox str(c)
```

The result is -12, how to get the result for 12.5%

any helps?

Thanks

Regards,

Arief

-125000 is not 12.5% of 1000000

A as a percentage of B

Percentage = (A/B) * 100

if you think/want that a negative number can be expressed in that way,

ABS(A)/ABS(B) * 100

```
dim a,b as integer
dim c as double // otherwise 12,5 becomes 12
a=1000000
b=-125000
c=ABS(b/a)*100
MsgBox Format(c, "###.##")
```

Also, you are storing the resulting value in an Integer, which is not an adequate type for a value that is not an integer (as Markus has pointed out in his code).

[quote=381649:@Jeff Tullin]-125000 is not 12.5% of 1000000

if you think/want that a negative number can be expressed in that way,[/quote]

Think of it as “I have $125,000 of debt but $1 million in assets”

Thanks for the solution, converting to double and using ABS Function, do the tricks.

Its works like a charm.

Thanks

Regards,

Arief

P.S. dont forget to add some error checking. For example if a is zero then you are in trouble. What if a or b are larger than an integer value can hold?

I think, there will be no problem.

the code only executed while the value <> empty.

And the value of B is always smaller than A.

Thanks

Regards

Arief

famous last words

[quote=381687:@Arief Sch.]I think, there will be no problem.

the code only executed while the value <> empty.

And the value of B is always smaller than A.[/quote]

A = 0

B = -100

-> Problem

Note: a zero value is NOT an empty value!

A = 5,000,000

B = 1,000,000

-> Problem

You really should use this case as an opportunity to learn about defensive programming and hardening your code

Markus, I understand your first example (A = 0), but the second I don’t know why that’s a problem, it is because the number has formatting (,) or because B is not negative?

Read up on integer, then on integer overflow.

Whenever you have a question, your first stop should be the documentation, not the forum.

P.S. there is a saying: Give a man a fish and he will be fine for a day, but teach him to fish and he never will be hungry again.

Learning to program is about learning to solve problems. So this time Im not giving you the solution (the fish) but point you in the right direction to read, learn, and find the solution yourself (teaching you to fish)

Sorry, I did read about integer and Uinteger in 32 bit apps the values are -2,147,483,648 to 2,147,483,647 (32-bit apps) and 0 to 4,294,967,295 (32-bit apps), info from here. Both are within those numbers.

I even created a test with your code above changing the values:

```
Dim a,b As Integer
Dim c As Double // otherwise 12,5 becomes 12
a=5000000
b=1000000
c=Abs(b/a)*100
MsgBox Format(c, "###.##")
```

And still don’t see the problem. The result is 20 as expected. Thank you.

My mistake. Try it with Integer and

A = 5,000,000,000 (five billion)

B = 1,000,000,000 (one billion)

Forum for Xojo Programming Language and IDE. Copyright © 2024 Xojo, Inc.