22

double値を小数点の前と後の2つのint値に分割する必要があります。小数点以下のintは2桁である必要があります。

例:

    10.50 = 10 and 50
    10.45 = 10 and 45
    10.5  = 10 and 50
4

14 に答える 14

31

これがあなたがそれをすることができる方法です:

string s = inputValue.ToString("0.00", CultureInfo.InvariantCulture);
string[] parts = s.Split('.'); 
int i1 = int.Parse(parts[0]);
int i2 = int.Parse(parts[1]);
于 2011-11-06T11:11:00.620 に答える
23

文字列の操作は遅くなる可能性があります。以下を使用してみてください。

double number;

long intPart = (long) number;
double fractionalPart = number - intPart;
于 2011-11-06T11:28:43.227 に答える
7

これを行うために使用したいプログラミング言語は何ですか? ほとんどの言語にはModulo operatorが必要です。C++ の例:

double num = 10.5;
int remainder = num % 1
于 2011-11-06T11:18:00.240 に答える
4
"10.50".Split('.').Select(int.Parse);
于 2013-01-29T07:20:05.733 に答える
2

文字列操作を含まない別のバリエーション:

static void Main(string[] args)
{
    decimal number = 10123.51m;
    int whole = (int)number;
    decimal precision = (number - whole) * 100;

    Console.WriteLine(number);
    Console.WriteLine(whole);
    Console.WriteLine("{0} and {1}",whole,(int) precision);
    Console.Read();
}

それらが小数であることを確認してください。そうしないと、通常の奇妙な float/double 動作が得られます。

于 2011-11-06T12:18:27.200 に答える
1

文字列で分割してからintに変換できます...

string s = input.ToString(); 
string[] parts = s.Split('.');
于 2011-11-06T11:12:31.260 に答える
1

この関数は 10 進数で時間がかかり、base 60 に変換されます。

    public string Time_In_Absolute(double time)
    {
        time = Math.Round(time, 2);
        string[] timeparts = time.ToString().Split('.');                        
        timeparts[1] = "." + timeparts[1];
        double Minutes = double.Parse(timeparts[1]);            
        Minutes = Math.Round(Minutes, 2);
        Minutes = Minutes * (double)60;
        return string.Format("{0:00}:{1:00}",timeparts[0],Minutes);
        //return Hours.ToString() + ":" + Math.Round(Minutes,0).ToString(); 
    }
于 2013-01-29T07:16:43.520 に答える
0

試す:

string s = "10.5";
string[] s1 = s.Split(new char[] { "." });
string first = s1[0];
string second = s1[1];
于 2011-11-06T11:14:05.283 に答える
0

私は実際に現実の世界でこれに答える必要がありました.@David Samuelの答えはその一部でしたが、ここでは私が使用した結果のコードです. 前に述べたように、文字列はオーバーヘッドが大きすぎます。ビデオのピクセル値全体でこの計算を行う必要がありましたが、中程度のコンピューターで 30 fps を維持することができました。

double number = 4140 / 640; //result is 6.46875 for example

int intPart = (int)number; //just convert to int, loose the dec.
int fractionalPart = (int)((position - intPart) * 1000); //rounding was not needed.
//this procedure will create two variables used to extract [iii*].[iii]* from iii*.iii*

これは、640 X 480 ビデオ フィードのピクセル数から x、y を解決するために使用されました。

于 2012-07-08T20:24:00.060 に答える
0

ひもを通さずにできます。例:

foreach (double x in new double[]{10.45, 10.50, 10.999, -10.323, -10.326, 10}){
    int i = (int)Math.Truncate(x);
    int f = (int)Math.Round(100*Math.Abs(x-i));
    if (f==100){ f=0; i+=(x<0)?-1:1; }
    Console.WriteLine("("+i+", "+f+")");
}

出力:

(10, 45)
(10, 50)
(11, 0)
(-10, 32)
(-10, 33)
(10, 0)

ただし、のような数値では機能しません-0.123。繰り返しになりますが、それがあなたの表現にどのように適合するかわかりません。

于 2011-11-06T11:27:35.597 に答える