World: r3wp
[Core] Discuss core issues
older newer | first last |
Ladislav 15-Oct-2006 [5701x6] | that is why you cannot find the solution in REBOL documentation |
Mathematical rules: 1) do not expect, that a result "exists" unless you know it does | |
in the case you are describing we get: $84.35 * 9220 ; == $777707.00 $84.36 * 9220 ; == $777799.20 | |
we can conclude, that there is *no amount* expressible in dollars and cents that has got the properties you want it to have | |
The solution is up to you - you need to know what you really want and how to get it. | |
I guess that if you will be able to describe what you really want, there will be no problem to get it | |
Graham 15-Oct-2006 [5707] | If you're dealing with $777,777 - then I suggest a professional accounting package is more appropriate. |
Ladislav 15-Oct-2006 [5708] | I disagree, even when using a professional accounting package we need to know what we want to get |
Gabriele 15-Oct-2006 [5709] | graham, my guess is that they are rupiahs, not dollars :) |
Oldes 15-Oct-2006 [5710x4] | Louis: Ladislav is right, the money shows you just 2 decimals digits and rounds as you can see: >> 777777 / 9220 == 84.3575921908894 >> to-money 777777 / 9220 == $84.36 >> (to-money 777777 / 9220) * 1000 == $84357.59 >> (to-money 777777 / 9220) * 1000000 == $84357592.19 |
What is suprise for me is, that it's not possible convert money to decimal using: to-decimal $84.36 | |
I think, that money datatype is almost useless | |
For example why is not working this? >> $10 * $10 ** Script Error: Expected one of: number! - not: money! ** Near: $10.00 * $10.00 Money is not a number? | |
Anton 15-Oct-2006 [5714] | The specified unit ($) would also have to be multiplied to be consistent there. We had this discussion before when talking about the proposed Rebol v3 deci! datatype... Anyway, I agree there are problems, but this works: >> 10 * $10 == $100.00 |
Ladislav 15-Oct-2006 [5715] | Oldes - you *can* convert money! to decimal as follows: second $84.36 ; == 84.36 |
Anton 15-Oct-2006 [5716] | I wish I could divide the money in my bank account into $10 amounts and then just multiply them, but the bank won't let me. I don't know why. |
Oldes 15-Oct-2006 [5717x4] | Ok, you are right, I know I can do 10 * $10 and it's probably logical, but anyway, for me money is a number and this is new form me: >> second (to-money 777777 / 9220) == 84.3575921908894 |
(anyway, I'm not going to use money datatype) | |
and it should be possible to do $10 * $10 as in the Louis' example above, the number 9220 should be money datatype as well as it is number of roupies per dollar (if I understand it well) so he should use RP$9220 if he is using money! for dollars | |
I doubt, someone is using this feature (currency identifier) with money datatype:-) | |
Anton 15-Oct-2006 [5721x4] | Louis' example did not multiply two money!s. |
and I strongly disagree that you should be able to multiply two money!s. | |
A currency exchange rate (such as Louis' 9220) includes, as part of its definition, two distinct currencies (eg. RP and USD). | |
Anyway, I don't want to argue this, you should know about how to handle units. Everyone should know that 10 Metres x 10 Metres does not equal 100 Metres. | |
Louis 15-Oct-2006 [5725] | All this is very interesting. I appreciate all of your comments. Anyway I have a workaround to the problem. First of all, however, I need to tell you why I wanted to be able to convert dollars back to rupiahs. It was just to save space in the database. I enter rupiahs, as that is the currency I am using right now, but the software converts it to dollars and saves the dollar amount to the database. To find out the rupiah amount later if needed, I was going to do a reverse conversion. The other solution is to simply record the rupiah amount in the database also, so that is what I'll do. |
Oldes 15-Oct-2006 [5726] | by the way, you may use the conversions on the side of the database during select |
Louis 15-Oct-2006 [5727] | Oldes, please explain. I do not understand what you mean. |
Oldes 15-Oct-2006 [5728] | mysql> create table test (dolars float(2)); Query OK, 0 rows affected (0.22 sec) mysql> insert into test values(777777); Query OK, 1 row affected (0.03 sec) mysql> select dolars,(dolars / 9220) as rupias from test; +--------+-----------------+ | dolars | rupias | +--------+-----------------+ | 777777 | 84.357592190889 | +--------+-----------------+ 1 row in set (0.01 sec) |
Louis 15-Oct-2006 [5729x2] | So I could get the reverse conversion I want if I were using mysql? |
Right now I'm simply using a rebol object database. It would be very difficult to change this particular script. But if I ever do something like this again I may consider using mysql. | |
Oldes 15-Oct-2006 [5731x2] | If you are using Rebol, you should probably use decimals, not money datatype |
(to store it in the database) | |
Louis 16-Oct-2006 [5733x3] | Oldes, yes. I can see that you are right. Store in decimal. Display in money. >> r: 777777 == 777777 >> x: 9220 == 9220 >> d: r / x == 84.3575921908894 >> d * x == 777777.0 >> to-money d == $84.36 >> |
I've converted the script to decimal, and it works great! | |
Decimal is converted to money for reports. | |
BrianH 16-Oct-2006 [5736] | Watch out though - your problem wasn't a decimal vs. money problem, it was a rounding problem. If you are going to store the dollar equvalent in a database make sure to store it as a floating-point value rather than a fixed-point like SQL's decimal type. Otherwise you are going to run into the same problem when you store the data and retrieve it again. |
Louis 16-Oct-2006 [5737] | Yes, I understand this. I think I've done this right. View, however, I don't understand. |
BrianH 16-Oct-2006 [5738] | You and me both. |
Jerry 19-Oct-2006 [5739] | How do I use the CALL native function to call a external program via shell and wait for the program to finish. I try the /wait refinement, but it does not work. * Example: call/wait "regedt32 /E C:\backup.reg" |
PeterWood 19-Oct-2006 [5740x4] | It appears to be something specific to the application being called. Both call/wait "cmd" and call/wait "C:\Program Files\rebol\view\rebol.exe" worked as expected for me though call/wait "regedt32" didn't. |
Regedt32 is returning a 0 completion code to Rebol as it is being loaded which Rebol returns from the call: >> call/wait "C:\Windows\System32\regedt32.exe" == 0 | |
This suggests that regedt32 is simply a loader for another program. | |
From http://en.wikipedia.org/wiki/Windows_Registryit seems that regedt32.exe invokes regedit.exe. The page also hints that it may be better to use reg.exe to update the registry from a script | |
Jerry 19-Oct-2006 [5744x2] | Thank you, Peter. |
I've just got an Out-Of-Memory error. Is there any way to have more virtual memory for REBOL to use. In Java, I can use command-line options to ask the OS to allocate more memory for my app. In REBOL, I have no idea. | |
Maxim 19-Oct-2006 [5746] | on windows? |
Gregg 19-Oct-2006 [5747] | REBOL should just use all it needs. What are you trying to do? |
Maxim 19-Oct-2006 [5748x3] | on windows, the OS should give you all the VM until the OS runs out. I've had REBOL use more than 1 GB of RAM... without doing anything special. |
(obviously, perfomance drops dramatically... but that's the OS's fault) | |
the machine only had 512MB of physical RAM btw. | |
older newer | first last |