And for even a better precision (tried on PI), fractionalPart = parseFloat((product - carry).toFixed(iterationMax - i)); Frédéric THOMAS
> From: [email protected] > To: [email protected] > Subject: RE: Decimal to Hex conversion. > Date: Mon, 29 Sep 2014 22:13:25 +0100 > > Actually, it is too late here to optimize it, any, the correct function is: > > function dec2hex(dec:Number):String { > const carryArr:Array = []; > const hexIntPart:String = dec.toString(16).toUpperCase(); > const integerPart:int = parseInt(dec.toString()); > const s:String = dec.toString(); > const i2:int = s.indexOf("."); > const iterationMax:int = (i2 > -1) ? s.substr(i2 + 1).length : 0; > var fractionalPart:Number = parseFloat((dec - > integerPart).toFixed(iterationMax)); > var product:Number; > > var hex:String = "0x" + hexIntPart.toString(); > > if (iterationMax > 0) { > for (var i:uint = 0; i < iterationMax; i++) { > product = fractionalPart * 16; > carryArr[carryArr.length] = product.toString(16).toUpperCase(); > const carry:uint = parseInt(product.toString()); > fractionalPart = parseFloat((product - > carry).toFixed(iterationMax)); > if (fractionalPart == 0) > break; > } > hex += "." + carryArr.join(""); > } > > return hex; > } > > > and should be use in the as per the previous example: > dec2hex(parseFloat(scaledVal.text)); > Frédéric THOMAS > > > From: [email protected] > > To: [email protected] > > Subject: RE: Decimal to Hex conversion. > > Date: Mon, 29 Sep 2014 21:24:01 +0100 > > > > Ok, I found the problem in mine for big numbers. > > > > @harbs, your function works for big numbers but not fractional, anyway, I > > didn't optimize mine, so, I will use its recursive pattern to recode mine, > > thanks. > > > > Frédéric THOMAS > > > > > Subject: Re: Decimal to Hex conversion. > > > From: [email protected] > > > Date: Mon, 29 Sep 2014 23:15:35 +0300 > > > To: [email protected] > > > > > > I have TOTALLY not read this thread, but does this function do what you > > > want? > > > > > > function toHex(d) { > > > var r = d % 16; > > > var result; > > > if (d-r == 0) > > > result = toChar(r); > > > else > > > result = toHex( (d-r)/16 ) + toChar(r); > > > return result; > > > } > > > function toChar(n) { > > > const alpha = "0123456789abcdef"; > > > return alpha.charAt(n); > > > } > > > > > > On Sep 29, 2014, at 11:03 PM, Frédéric THOMAS <[email protected]> > > > wrote: > > > > > > > Also, it seems to work for fractional small numbers, it doesn't on big > > > > one because this function still rely on the toString(radix) method with > > > > on my windows 64 bits return a wrong result, should a bug to be filled > > > > on Adobe or some else first can confirm those results ? > > > > > > > > decimal (10) -> dec2hex -> toString(16) -> real > > > > 14159265359 -> 0x34.34BF53E2D -> 0x4BF53E4F -> 0x34BF53E4F > > > > 3.14159265359 -> 0x3.243F6A8885D -> 0x3.0 -> 0x3.243F6A8885A308D > > > > > > > > In between I'll try to find a way to code the correct function. > > > > > > > > Frédéric THOMAS > > > > > > > >> From: [email protected] > > > >> To: [email protected] > > > >> Subject: RE: Decimal to Hex conversion. > > > >> Date: Mon, 29 Sep 2014 20:34:51 +0100 > > > >> > > > >> Actually I wasn't sure of mathematical correctness of the solution I > > > >> gave above and I end up writing my own function for it, so, use it > > > >> instead of the one I gave before: > > > >> > > > >> function dec2hex(dec:Number):String { > > > >> const carryArr:Array = []; > > > >> const integerPart:int = parseInt(dec.toString(16)); > > > >> const s:String = dec.toString(); > > > >> const iterationMax:int = s.substr(s.indexOf(".") + 1).length; > > > >> var fractionalPart:Number = parseFloat((dec - > > > >> integerPart).toFixed(iterationMax)); > > > >> var product:Number; > > > >> > > > >> var hex:String = "0x" + integerPart.toString(); > > > >> > > > >> if (iterationMax > 0) { > > > >> for (var i:uint = 0; i < iterationMax; i++) { > > > >> product = fractionalPart * 16; > > > >> carryArr[carryArr.length] = > > > >> product.toString(16).toUpperCase(); > > > >> const carry:uint = parseInt(product.toString()); > > > >> fractionalPart = parseFloat((product - > > > >> carry).toFixed(iterationMax)); > > > >> if (fractionalPart == 0) > > > >> break; > > > >> } > > > >> hex += "." + carryArr.join(""); > > > >> } > > > >> > > > >> return hex; > > > >> } > > > >> > > > >> You could probably optimize it but at least it returns the correct > > > >> result. > > > >> > > > >> Frédéric THOMAS > > > >> > > > >>> From: [email protected] > > > >>> To: [email protected] > > > >>> Subject: RE: Decimal to Hex conversion. > > > >>> Date: Mon, 29 Sep 2014 13:24:21 +0100 > > > >>> > > > >>> And to be sure the user is allowed to type decimals only, I would add > > > >>> on key down listener a check for it like this: > > > >>> > > > >>> > > > >>> > > > >>> if( isNaN(Number(scaledVal.text)) ){ > > > >>> > > > >>> scaledVal.text = > > > >>> scaledVal.substring(0, str.length-1); > > > >>> > > > >>> } > > > >>> > > > >>> Or use a preventDefault() > > > >>> > > > >>> and to optimize a bit, on change, check the event is of type CHANGE > > > >>> before computing. > > > >>> > > > >>> HTH, > > > >>> Frédéric THOMAS > > > >>> > > > >>>> From: [email protected] > > > >>>> Date: Mon, 29 Sep 2014 17:42:33 +0530 > > > >>>> Subject: Re: Decimal to Hex conversion. > > > >>>> To: [email protected] > > > >>>> > > > >>>> Thanks Frederic. It Worked. > > > >>>> > > > >>>> -- > > > >>>> Regards > > > >>>> Saju Thankathurai, > > > >>>> > > > >>>> > > > >>>> On Mon, Sep 29, 2014 at 5:27 PM, Frédéric THOMAS > > > >>>> <[email protected]> > > > >>>> wrote: > > > >>>> > > > >>>>> > > > >>>>> hexVal.text ="0x" + scaledVal.text.split(".").map(function > > > >>>>> (item:*, > > > >>>>> index:int, array:Array):String { > > > >>>>> return int(item).toString(16).toUpperCase(); > > > >>>>> }).join("."); > > > >>>>> > > > >>>>> Frédéric THOMAS > > > >>>>> > > > >>>>>> From: [email protected] > > > >>>>>> To: [email protected] > > > >>>>>> Subject: RE: Decimal to Hex conversion. > > > >>>>>> Date: Mon, 29 Sep 2014 12:49:59 +0100 > > > >>>>>> > > > >>>>>> so int is the same! > > > >>>>>> if uint is just half of int... > > > >>>>>> lets say you should first read the different types but for your > > > >>>>>> try use > > > >>>>> number > > > >>>>>> > > > >>>>>>> From: [email protected] > > > >>>>>>> Date: Mon, 29 Sep 2014 17:16:51 +0530 > > > >>>>>>> Subject: Re: Decimal to Hex conversion. > > > >>>>>>> To: [email protected] > > > >>>>>>> > > > >>>>>>> Hi, > > > >>>>>>> > > > >>>>>>> I tried using int, it didnt help. Below is the demo code, > > > >>>>>>> > > > >>>>>>> <?xml version="1.0" encoding="utf-8"?> > > > >>>>>>> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" > > > >>>>>>> xmlns:s="library://ns.adobe.com/flex/spark" > > > >>>>>>> xmlns:mx="library://ns.adobe.com/flex/mx" > > > >>>>>>> initialize="windowedapplication1_initializeHandler(event)" > > > > >>>>>>> <fx:Script> > > > >>>>>>> <![CDATA[ > > > >>>>>>> import mx.events.FlexEvent; > > > >>>>>>> import spark.events.TextOperationEvent; > > > >>>>>>> protected function > > > >>>>> scaledVal_changeHandler(event:TextOperationEvent):void > > > >>>>>>> { > > > >>>>>>> hexVal.text = int(scaledVal.text).toString(16).toUpperCase(); > > > >>>>>>> } > > > >>>>>>> protected function > > > >>>>>>> hexVal_changeHandler(event:TextOperationEvent):void > > > >>>>>>> { > > > >>>>>>> var texts:String = "0x"+hexVal.text; > > > >>>>>>> scaledVal.text = int(texts).toString(10); > > > >>>>>>> } > > > >>>>>>> protected function > > > >>>>>>> windowedapplication1_initializeHandler(event:FlexEvent):void > > > >>>>>>> { > > > >>>>>>> nativeWindow.maximize(); > > > >>>>>>> } > > > >>>>>>> protected function button1_clickHandler(event:MouseEvent):void > > > >>>>>>> { > > > >>>>>>> scaledVal.text = ""; > > > >>>>>>> hexVal.text = ""; > > > >>>>>>> } > > > >>>>>>> ]]> > > > >>>>>>> </fx:Script> > > > >>>>>>> <fx:Declarations> > > > >>>>>>> <!-- Place non-visual elements (e.g., services, value objects) > > > >>>>>>> here --> > > > >>>>>>> </fx:Declarations> > > > >>>>>>> <s:BorderContainer width="100%" height="100%" > > > >>>>>>> borderVisible="true"> > > > >>>>>>> <s:VGroup verticalCenter="0" horizontalCenter="0"> > > > >>>>>>> <s:Label width="100%" color="blue" > > > >>>>>>> text="Demo to convert hexa to scaled value and vice-versa"/> > > > >>>>>>> <mx:Form width="100%" height="100%"> > > > >>>>>>> <mx:FormHeading label="Enter values into the textbox"/> > > > >>>>>>> <mx:FormItem label="Enter Scaled value"> > > > >>>>>>> <s:TextInput id="scaledVal" width="200" > > > >>>>>>> change="scaledVal_changeHandler(event)"/> > > > >>>>>>> </mx:FormItem> > > > >>>>>>> <mx:FormItem label="Enter Hexa value"> > > > >>>>>>> <s:TextInput id="hexVal" width="200" > > > >>>>> change="hexVal_changeHandler(event)"/> > > > >>>>>>> </mx:FormItem> > > > >>>>>>> </mx:Form> > > > >>>>>>> <s:Button label="Reset" click="button1_clickHandler(event)"/> > > > >>>>>>> </s:VGroup> > > > >>>>>>> </s:BorderContainer> > > > >>>>>>> </s:WindowedApplication> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> -- > > > >>>>>>> Regards > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> Saju Thankathurai, > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> *"We **cannot do great things on this Earth, only small things > > > >>>>>>> with > > > >>>>> great > > > >>>>>>> love"* > > > >>>>>>> *-Mother Teresa (1910-1997)* > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> On Mon, Sep 29, 2014 at 5:06 PM, Evyatar Ben Halevi-Arbib < > > > >>>>>>> [email protected]> wrote: > > > >>>>>>> > > > >>>>>>>> You convert initially using uint, so decimals are omitted. > > > >>>>>>>> > > > >>>>>>>> Regards, > > > >>>>>>>> Evyatar > > > >>>>>>>> > > > >>>>>>>> On Mon, Sep 29, 2014 at 2:22 PM, Saju Thankathurai < > > > >>>>>>>> [email protected]> > > > >>>>>>>> wrote: > > > >>>>>>>> > > > >>>>>>>>> Hi, > > > >>>>>>>>> > > > >>>>>>>>> How can we convert a decimal value to Hex value? > > > >>>>>>>>> > > > >>>>>>>>> I need to convert *1345.4567 *value to HEX value. I used the > > > >>>>>>>>> below > > > >>>>> code > > > >>>>>>>> to > > > >>>>>>>>> convert decimal values to Hex, > > > >>>>>>>>> > > > >>>>>>>>> hexVal.text = uint(scaledVal.text).toString(16).toUpperCase(); > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> Below code to convert from Hex to decimal. > > > >>>>>>>>> var texts:String = "0x"+hexVal.text; > > > >>>>>>>>> scaledVal.text = uint(texts).toString(10); > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> The value 1345 is converted to HEX without any issues. But after > > > >>>>> the > > > >>>>>>>>> decimal part, it is not converting. > > > >>>>>>>>> > > > >>>>>>>>> Could some one give inputs on this conversion. > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> -- > > > >>>>>>>>> Regards > > > >>>>>>>>> Saju Thankathurai, > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>> > > > >>>>> > > > >>>>> > > > >>> > > > >> > > > > > > > > > >
