我想以A/B
格式表示两个数字,wWhereA
和B
是任何整数。我想要最短格式的十进制结果。
例子:
- 的最短十进制表示
3/28
是"0.10(714285)"
。 1/7
is的十进制表示"0.(142857)"
我怎样才能用 C# 做到这一点?
我想以A/B
格式表示两个数字,wWhereA
和B
是任何整数。我想要最短格式的十进制结果。
例子:
3/28
是"0.10(714285)"
。1/7
is的十进制表示"0.(142857)"
我怎样才能用 C# 做到这一点?
希望有人可以将其转换为 C# 代码:
def get_decimal(a, b):
result = str(a / b) + '.'
r = a % b
remainders = []
while r not in remainders:
remainders.append(r)
result += str(10 * r / b)
r = 10 * r % b
return result
一些测试:
>>> get_decimal(1, 7)
'0.142857'
>>> get_decimal(10, 7)
'1.428571'
>>> get_decimal(3, 28)
'0.10714285'
>>> get_decimal(99099167, 990000000)
'0.100100168'
如果您需要括号来指示重复的数字集,则如下所示:
def get_decimal(a, b):
result = str(a / b) + '.'
r = a % b
remainders = []
digits = []
while r not in remainders:
remainders.append(r)
digits.append(str(10 * r / b))
r = 10 * r % b
start = remainders.index(r)
result += ''.join(digits[0:start]) + '(' + ''.join(digits[start:]) + ')'
return result
一些测试:
>>> get_decimal(1, 7)
'0.(142857)'
>>> get_decimal(10, 7)
'1.(428571)'
>>> get_decimal(3, 28)
'0.10(714285)'
>>> get_decimal(99099167, 990000000)
'0.1001001(68)'
我认为您希望将结果保留到小数点后 2 位...为此您可以使用
double result = 0.142857;
int decimalPlaces = 2;//for two decimal places
double multiplier = Math.Pow(10, Convert.ToDouble(decimalPlaces));
result = Math.Ceiling(result * multiplier) / multiplier;