是否有一个库将Double转换为具有整数的String,后跟一个分数?
例如
1.125 = 1 1/8
我只是寻找到64英寸的分数.
你的问题非常简单,因为你确信分母总是会在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); }
您可能遇到的一个问题是并非所有小数值都可以用双精度表示.甚至一些看似简单的值,如0.1.现在开始使用伪代码算法.您可能最好确定64英寸的数字,但将小数部分除以0.015625.之后,您可以将分数降低到最小公分母.但是,由于你表示英寸,你可能不想使用最小的公分母,而只是使用通常表示英寸的值,2,4,8,16,32,64.
但要指出的一点是,由于你使用的是英寸,如果值都是一英寸的合适分数,分母为2,4,8,16,32,64,则该值不应包含浮点误差,因为分母总是2的幂.但是如果你的数据集的值为.1英寸,那么你将开始遇到问题.