将小数转换为英尺。英寸

问题描述 投票:0回答:1

我需要能够从标准的double转换为合理的foot.inches的另一个double(或float)。读取此输出的工具读取之前的第一个数字。表示为“英尺”,之后表示为“英寸”。

该工具将1.12读取为2英尺,因为它是1英尺12英寸,这就是为什么我们要舍入到小数点后一位,除非它正好是x英尺11英寸。

此函数的目标是传递标准十进制数,并通过此特定格式将其转换为英尺和英寸。

public static string ToDecimalFeetString(double num)
{
    return *new ratio, **as a string**, rounded to one decimal place, unless 11 or 10 inches*
}

ToDecimalFeet(0.4) // returns 0.5 (0.4 feet == 5 inches)
ToDecimalFeet(50.9) // returns 50.11 (50.9 feet == 50 feet and 11 inches)
ToDecimalFeet(10.8) // returns 10.10 (10.8 feet == 10 feet and 10 inches)
ToDecimalFeet(29.1) // returns 29.1 (29.1 feet == 29 feet and ~1 inch, when rounded)
ToDecimalFeet(1.00) // returns 1.00 (1.00 feet == 1 foot and zero inches)

Edit:这显然需要澄清的编辑,所以去了:

有些评论提到“为什么要使用英制?” -很好的问题,尽管此转换是针对使用foot.inches的完全独立的(生产)工具-因此,我们必须这样做。

“如果您需要返回x英尺10英寸怎么办?”这是一个很大的问题,在这种情况下,我们将返回x.10-是的,它的值也与x.1完全相同,我们将返回一英寸,但是单独的工具以不同的方式读取它们,这使我犯了一个愚蠢的错误。

我们实际上是返回一个字符串,而不是双精度值。因此,完全可以打印“ 0.10”和“ 0.1”,因为它们与其他工具的值完全不同,对此我深表歉意。我已经在我上面的方法中反映了这一点。

编辑2:固定格式错误

c# converters
1个回答
0
投票

一种简单的方法是获取输入数字,获取“整数”部分(不会改变),然后分别获取“十进制”部分,然后乘以12。我们可以将这些组合起来返回作为字符串:

public static string ToDecimalFeet(double num)
{
    var wholePart = (int) num;
    var decimalPart = num - wholePart;
    var inches = Math.Round(12 * decimalPart, 0);
    return $"{wholePart}.{inches}";
}
© www.soinside.com 2019 - 2024. All rights reserved.