Bagikan melalui


Metode System.Single.CompareTo

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Nilai harus identik agar dianggap sama. Terutama ketika nilai floating-point bergantung pada beberapa operasi matematika, umum bagi mereka untuk kehilangan presisi dan agar nilainya hampir identik kecuali untuk digit yang paling tidak signifikan. Karena itu, nilai CompareTo pengembalian metode mungkin tampak mengejutkan kadang-kadang. Misalnya, perkalian dengan nilai tertentu diikuti oleh pembagian dengan nilai yang sama harus menghasilkan nilai asli, tetapi dalam contoh berikut, nilai komputasi ternyata lebih besar dari nilai asli. Memperlihatkan semua digit signifikan dari dua nilai dengan menggunakan string format numerik standar "R" menunjukkan bahwa nilai komputasi berbeda dari nilai asli dalam digit yang paling tidak signifikan. Untuk informasi tentang menangani perbandingan tersebut, lihat bagian Keterangan dari Equals(Single) metode .

Meskipun objek yang nilainya NaN tidak dianggap sama dengan objek lain yang nilainya NaN (bahkan itu sendiri), IComparable<T> antarmuka mengharuskan itu A.CompareTo(A) mengembalikan nol.

CompareTo(System.Object)

Parameter value harus null atau instans Single; jika tidak, pengecualian dilemparkan. Setiap instans Single, terlepas dari nilainya, dianggap lebih besar dari null.

using System;

public class Example
{
   public static void Main()
   {
       float value1 = 16.5457f;
       float operand = 3.8899982f;
       object value2 = value1 * operand / operand;
       Console.WriteLine("Comparing {0} and {1}: {2}\n",
                         value1, value2, value1.CompareTo(value2));
       Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
                         value1, value2, value1.CompareTo(value2));
   }
}
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
let value1 = 16.5457f
let operand = 3.8899982f
let value2 = box (value1 * operand / operand)
printfn $"Comparing {value1} and {value2}: {value1.CompareTo value2}\n"
printfn $"Comparing {value1:R} and {value2:R}: {value1.CompareTo value2}"
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
Module Example2
    Public Sub Main()
        Dim value1 As Single = 16.5457
        Dim value2 As Object = value1 * CSng(3.8899982) / CSng(3.8899982)
        Console.WriteLine("Comparing {0} and {1}: {2}",
                          value1, value2, value1.CompareTo(value2))
        Console.WriteLine()
        Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
                          value1, value2, value1.CompareTo(value2))
    End Sub
End Module
' The example displays the following output:
'       Comparing 16.5457 and 16.5457: -1
'       
'       Comparing 16.5457 and 16.545702: -1

Metode ini diimplementasikan untuk mendukung IComparable antarmuka.

CompareTo(System.Single)

Metode ini mengimplementasikan System.IComparable<T> antarmuka dan berkinerja sedikit lebih baik daripada Single.CompareTo(Object) kelebihan beban karena tidak harus mengonversi value parameter menjadi objek.

using System;

public class Example2
{
   public static void Main()
   {
       float value1 = 16.5457f;
       float operand = 3.8899982f;
       float value2 = value1 * operand / operand;
       Console.WriteLine("Comparing {0} and {1}: {2}\n",
                         value1, value2, value1.CompareTo(value2));
       Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
                         value1, value2, value1.CompareTo(value2));
   }
}
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
let value1 = 16.5457f
let operand = 3.8899982f
let value2 = value1 * operand / operand
printfn $"Comparing {value1} and {value2}: {value1.CompareTo value2}\n"
printfn $"Comparing {value1:R} and {value2:R}: {value1.CompareTo value2}"
// The example displays the following output:
//       Comparing 16.5457 and 16.5457: -1
//       
//       Comparing 16.5457 and 16.545702: -1
Module Example
   Public Sub Main()
       Dim value1 As Single = 16.5457
       Dim value2 As Single = value1 * CSng(3.8899982) / CSng(3.8899982)
       Console.WriteLine("Comparing {0} and {1}: {2}",
                         value1, value2, value1.CompareTo(value2))
       Console.WriteLine()
       Console.WriteLine("Comparing {0:R} and {1:R}: {2}",
                         value1, value2, value1.CompareTo(value2))
   End Sub
End Module
' The example displays the following output:
'       Comparing 16.5457 and 16.5457: -1
'       
'       Comparing 16.5457 and 16.545702: -1

Melebarkan konversi

Tergantung pada bahasa pemrograman Anda, mungkin untuk membuat CompareTo kode metode di mana jenis parameter memiliki bit yang lebih sedikit (lebih sempit) daripada jenis instans. Hal ini dimungkinkan karena beberapa bahasa pemrograman melakukan konversi pellebaran implisit yang mewakili parameter sebagai jenis dengan bit sebanyak instans.

Misalnya, misalkan jenis instans adalah Single dan jenis parameternya adalah Int32. Pengkompilasi Microsoft C# menghasilkan instruksi untuk mewakili nilai parameter sebagai Single objek, lalu menghasilkan Single.CompareTo(Single) metode yang membandingkan nilai instans dan representasi parameter yang diperlebar.

Lihat dokumentasi bahasa pemrograman Anda untuk menentukan apakah pengkompilasinya melakukan konversi tipe numerik yang melebar implisit. Untuk informasi selengkapnya, lihat topik Ketik Tabel Konversi.

Presisi dalam perbandingan

Presisi angka floating-point di luar presisi yang didokumentasikan khusus untuk implementasi dan versi .NET. Akibatnya, perbandingan dua angka tertentu mungkin berubah di antara versi .NET karena presisi representasi internal angka mungkin berubah.