当前位置:  开发笔记 > 编程语言 > 正文

将Double格式化为分数

如何解决《将Double格式化为分数》经验,为你挑选了2个好方法。

是否有一个库将Double转换为具有整数的String,后跟一个分数?

例如

1.125 = 1 1/8

我只是寻找到64英寸的分数.



1> Jimmy..:

你的问题非常简单,因为你确信分母总是会在C#中划分64.(有人可以随意翻译Java版本):

string ToMixedFraction(decimal x) 
{
    int whole = (int) x;
    int denominator = 64;
    int numerator = (int)( (x - whole) * denominator );

    if (numerator == 0) 
    {
        return whole.ToString();
    }
    while ( numerator % 2 == 0 ) // simplify fraction
    {
        numerator /= 2;
        denominator /=2;
    }
    return string.Format("{0} {1}/{2}", whole, numerator, denominator);
}

奖金:Code Golf

public static string ToMixedFraction(decimal x) {
    int w = (int)x,
        n = (int)(x * 64) % 64,
        a = n & -n;
    return w + (n == 0 ? "" : " " + n / a + "/" + 64 / a);
}



2> Kibbee..:

您可能遇到的一个问题是并非所有小数值都可以用双精度表示.甚至一些看似简单的值,如0.1.现在开始使用伪代码算法.您可能最好确定64英寸的数字,但将小数部分除以0.015625.之后,您可以将分数降低到最小公分母.但是,由于你表示英寸,你可能不想使用最小的公分母,而只是使用通常表示英寸的值,2,4,8,16,32,64.

但要指出的一点是,由于你使用的是英寸,如果值都是一英寸的合适分数,分母为2,4,8,16,32,64,则该值不应包含浮点误差,因为分母总是2的幂.但是如果你的数据集的值为.1英寸,那么你将开始遇到问题.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有