Flash Builder 4.6 | mx:DataGrid |十进制到分数...或分数到十进制格式

时间:2015-10-01 15:36:53

标签: actionscript-3 flex datagrid flash-builder fractions

我的数据网格有一个深度维度列,显示分数(例如,一个维度是24 3/8)。我有能力选择文本(分数或小数),但基本上我需要能够从 24 3/8 来回转换为 24.375 。< / p>

为什么需要十进制格式: 我有用于过滤深度维度列的复选框,因此我需要该逻辑的十进制形式(例如,复选框以查看20到26之间的过滤器深度尺寸)。

为什么需要分数格式:我需要分数格式,因为深度维度数据将在应用程序的另一部分中作为字符串引用。当在dataGrid中使用此格式时,过滤器不起作用,因为它不会将24 3/8识别为数字/ int。

所以基本上我正在寻找一种方法来转换两种格式, 24 3/8到24.375 24.375到24 3/8

再一次,我为混淆道歉 - 我可以根据需要重新编辑和/或添加更多详细信息。

提前致谢!

- moe

1 个答案:

答案 0 :(得分:0)

  

为什么需要分数格式:我需要分数格式   因为深度维度数据将作为字符串引用   该申请的另一部分。

您需要分数格式的原因似乎很奇怪。您是否了解可以通过投射NumberString中使用 var decimalNum:Number = 3.14; //concatenating a Number with a String automatically casts it var autoCastString:String = "I want to eat some " + decimalNum; trace(autoCastString); // cast as String type var decimalString:String = String(decimalNum); trace("Mmmm! I like", decimalString); 数据类型?

I want to eat some 3.14
Mmmm! I like 3.14

输出:

package com.lookmum.util
{
    public class Fraction
    {
        private static var it         :Number = 0;
        public static var iterationLimit:Number = 10000;
        public static var accuracy    :Number = 0.00001;

        public function Fraction()
        {

        }

        private static  function resetIt():void
        {
            it = 0;
        }

        private static  function addIt():Boolean
        {
            it++;
            if (it == iterationLimit)
            {
                trace('error : too many iterations');
                return true;
            }
            else
            {
                return false;
            }
        }

        public function getFractionString(num:Number):String
        {
            var fracString:String;
            var fracArray:Array = getFraction(num);
            switch (fracArray.length)
            {
                case 1 :
                    fracString = num.toString();
                    break;
                case 2 :
                    fracString = fracArray[0].toString() + '/' + fracArray[1].toString();
                    break;
                case 3 :
                    fracString = fracArray[0].toString() + ' ' + fracArray[1].toString() + '/' + fracArray[2].toString();
                    break;
            }
            return fracString;
        }

        public function getFraction(num:Number):Array
        {
            var fracArray:Array = new Array();
            var hasWhole:Boolean = false;
            if (num >= 1)
            {
                hasWhole = true;
                fracArray.push(Math.floor(num));
            }
            if (num - Math.floor(num) == 0)
            {
                return fracArray;
            }
            if (hasWhole)
            {
                num = num - Math.floor(num);
            }
            var a:Number = num - int(num);
            var p:Number = 0;
            var q:Number = a;

            resetIt();

            while (Math.abs(q - Math.round(q)) > accuracy)
            {
                addIt();
                p++;
                q = p / a;
            }
            fracArray.push(Math.round(q * num));
            fracArray.push(Math.round(q));
            return fracArray;
        }
    }
}

但也许你有其他原因。以下代码来自此链接:Decimal to Fraction。我还没有测试过它。

undefined