C# 提取双精度矩阵的分数系数

C# 提取双精度矩阵的分数系数,c#,C#,数字170可以表示为标准化形式,带有: 1,7作为分数系数 +2为指数,10为基数 170=1,7×10+2 有没有办法用数学方法提取“分数系数”? 不使用字符串表示形式 var testInputs = new double[] { 1.7E+1, // 17 1.7E+2, // 170 1.7E+3, // 1700 -1.7E+1, // -17 -1.7E+2,

数字170可以表示为标准化形式,带有:
1,7作为分数系数
+2为指数,10为基数

170=1,7×10+2

有没有办法用数学方法提取“分数系数”? 不使用字符串表示形式

var testInputs = 
    new double[] {
        1.7E+1,     // 17
        1.7E+2,     // 170
        1.7E+3,     // 1700

        -1.7E+1,    // -17
        -1.7E+2,    // -170
        -1.7E+3,    // -1700

        1.7E-1,     // 0,17
        1.7E-2,     // 0,017
        1.7E-3,     // 0,0017

        -1.7E-1,    // -0,17
        -1.7E-2,    // -0,017
        -1.7E-3,    // -0,0017
    };
这些试验分数系数的绝对值为:1,7


注意:
是十进制分隔符

编辑:初始版本不适用于
(-1),以下是解决此问题的算法方法:

public double ExtractFraction(double value)
{
    if (value == 0) return value;

    if (value > 10 || value < -10)
    {
        while (value > 10 || value < -10)
        {
            value /= 10.0;
        }
    }
    else if (value < 1 || value > -1)
    {
        while (value < 1 && value > -1)
        {
            value *= 10.0;
        }
    }
    return value;
}
公共双精度分数(双精度值)
{
如果(值==0)返回值;
如果(值>10 | |值<-10)
{
而(值>10 | |值<-10)
{
数值/=10.0;
}
}
else if(值<1 | |值>-1)
{
while(值<1&&value>-1)
{
数值*=10.0;
}
}
返回值;
}
说明:如果该值超出范围]10-10[需要除以10,直到滑入该范围


如果该值在[1-1]范围内[你需要乘以10,直到你滑出这个范围

免责声明不是家庭作业,我在问自己是否有一种按位操作,它比
string getfrancial(double-input)=>input.ToString(“E”).Substring(0,input.ToString(“E”).IndexOf(“E”).TrimEnd更好('0')
未测试。能否将预期输出添加到
测试输入中?
?如果x>0除以10,直到值小于0……请注意,此处的数组不是预期的数组。逗号将数字分隔为两个不同的值。可能有助于您解释这是什么,以及为什么使用
Floor
通过该转换转换为
int
谢谢@xdtTransform:)喜欢它。添加0删除0。它循环了一点,但数学很简单。@xdtTransform yo,你可以随心所欲地对它进行四舍五入。我喜欢循环:)
var inputs = new[] { 1700,170,17,1.7,0.17,0.017,0.0017,
                    -1700, -170, -17, -1.7, -0.17, -0.017, -0.0017 };

decimal  GetFractional(decimal X) =>
    (decimal)X/(decimal)(Math.Pow(10, (int)Math.Log10(Math.Abs(X))-(X<1 && X > -1?1:0)));

foreach (var x in inputs) 
{ 
    WriteLine($"{x,7}\t\t{GetFractional(x)}"); 
}
1700        1,7
 170        1,7
  17        1,7
 1,7        1,7
0,17        1,7
0,017       1,7
0,0017      1,7
-1700       -1,7
-170        -1,7
 -17        -1,7
-1,7        -1,7
-0,17       -1,7
-0,017      -1,7
-0,0017     -1,7
public double ExtractFraction(double value)
{
    if (value == 0) return value;

    if (value > 10 || value < -10)
    {
        while (value > 10 || value < -10)
        {
            value /= 10.0;
        }
    }
    else if (value < 1 || value > -1)
    {
        while (value < 1 && value > -1)
        {
            value *= 10.0;
        }
    }
    return value;
}