Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
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 nilainya nyaris identik, kecuali dalam digit yang paling tidak signifikan. Karena itu, nilai pengembalian metode CompareTo 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 "R" standar menunjukkan bahwa nilai komputasi berbeda dari nilai asli dalam digit yang paling tidak signifikan. Untuk informasi tentang menangani perbandingan tersebut, lihat bagian Keterangan dari metode Equals(Single).
Meskipun objek yang nilainya NaN tidak dianggap sama dengan objek lain yang nilainya NaN (bahkan itu sendiri), antarmuka IComparable<T> mengharuskan 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 {value1} and {value2}: {value1.CompareTo(value2)}");
Console.WriteLine();
Console.WriteLine($"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
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 antarmuka IComparable.
CompareTo(System.Single)
Metode ini mengimplementasikan antarmuka System.IComparable<T> dan berkinerja sedikit lebih baik daripada kelebihan beban Single.CompareTo(Object) karena tidak perlu mengonversi parameter value 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 {value1} and {value2}: {value1.CompareTo(value2)}");
Console.WriteLine();
Console.WriteLine($"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
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
Konversi meluas
Bergantung pada bahasa pemrograman Anda, mungkin untuk mengimplementasikan metode CompareTo di mana tipe parameter memiliki bit lebih sedikit (lebih sempit) daripada tipe instance. Hal ini dimungkinkan karena beberapa bahasa pemrograman melakukan konversi pelebaran implisit yang mewakili parameter sebagai tipe dengan jumlah bit yang sama banyaknya dengan instans.
Misalnya, jenis instans Single dan jenis parameternya Int32. Pengkompilasi Microsoft C# menghasilkan instruksi untuk mewakili nilai parameter sebagai objek Single, lalu menghasilkan metode Single.CompareTo(Single) 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 Tabel Konversi Tipe.
Presisi dalam perbandingan
Presisi angka floating-point yang melebihi presisi terdokumentasi bergantung pada implementasi dan versi .NET. Akibatnya, perbandingan dua angka tertentu mungkin berubah di antara versi .NET karena presisi representasi internal angka mungkin berubah.