2

A/B2 つの数値を形式で表現したいのですが、whereABare any integers です。小数の結果を最短形式で表示したい。

例:

  • の最短の 10 進数表現は3/28です"0.10(714285)"
  • の 10 進数表現1/7"0.(142857)"

C#でこれを行うにはどうすればよいですか?

4

2 に答える 2

6

うまくいけば、誰かがこれを 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)'
于 2012-12-28T11:26:16.553 に答える
0

小数点以下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;
于 2012-12-28T11:09:49.960 に答える