public: static int Compare(System::Decimal d1, System::Decimal d2); public static int Compare (decimal d1, decimal d2); static member Compare : decimal * decimal -> int Public Shared Function Compare (d1 As Decimal, d2 As Decimal) As Integer Int32 A signed number indicating the relative values of d1 and d2.
ExamplesThe following example compares several Decimal values. Note that the first comparison indicates that the two values are equal despite the subtraction operation performed on the value2 variable. This is because the Decimal type has 29 digits of precision, whereas a difference between these two values can be detected only with 30 digits of precision. using System; public enum Relationship { LessThan = -1, Equals = 0, GreaterThan = 1 } public class Example { public static void Main() { decimal value1 = Decimal.MaxValue; decimal value2 = value1 - .01m; Console.WriteLine("{0} {2} {1}", value1, value2, (Relationship) Decimal.Compare(value1, value2)); value2 = value1 / 12m - .1m; value1 = value1 / 12m; Console.WriteLine("{0} {2} {1}", value1, value2, (Relationship) Decimal.Compare(value1, value2)); value1 = value1 - .2m; value2 = value2 + .1m; Console.WriteLine("{0} {2} {1}", value1, value2, (Relationship) Decimal.Compare(value1, value2)); } } // The example displays the following output: // 79228162514264337593543950335 Equals 79228162514264337593543950335 // 6602346876188694799461995861.2 GreaterThan 6602346876188694799461995861.1 // 6602346876188694799461995861.0 LessThan 6602346876188694799461995861.2 open System type Relationship = | LessThan = -1 | Equals = 0 | GreaterThan = 1 [<EntryPoint>] let main _ = let value1 = Decimal.MaxValue let value2 = value1 - 0.01m printfn $"{value1} {Decimal.Compare(value1, value2) |> enum<Relationship>} {value2}" let value2 = value1 / 12m - 0.1m let value1 = value1 / 12m printfn $"{value1} {Decimal.Compare(value1, value2) |> enum<Relationship>} {value2}" let value1 = value1 - 0.2m let value2 = value2 + 0.1m printfn $"{value1} {Decimal.Compare(value1, value2) |> enum<Relationship>} {value2}" 0 // The example displays the following output: // 79228162514264337593543950335 Equals 79228162514264337593543950335 // 6602346876188694799461995861.2 GreaterThan 6602346876188694799461995861.1 // 6602346876188694799461995861.0 LessThan 6602346876188694799461995861.2 Public Enum Relationship As Integer LessThan = -1 Equals = 0 GreaterThan = 1 End Enum Module Example Public Sub Main() Dim value1 As Decimal = Decimal.MaxValue Dim value2 As Decimal = value1 - .01d Console.WriteLine("{0} {2} {1}", value1, value2, CType(Decimal.Compare(value1, value2), Relationship)) value2 = value1 / 12d - .1d value1 = value1 / 12d Console.WriteLine("{0} {2} {1}", value1, value2, CType(Decimal.Compare(value1, value2), Relationship)) value1 = value1 - .2d value2 = value2 + .1d Console.WriteLine("{0} {2} {1}", value1, value2, CType(Decimal.Compare(value1, value2), Relationship)) End Sub End Module ' The example displays the following output: ' 79228162514264337593543950335 Equals 79228162514264337593543950335 ' 6602346876188694799461995861.2 GreaterThan 6602346876188694799461995861.1 ' 6602346876188694799461995861.0 LessThan 6602346876188694799461995861.2Applies to
Significant digits are referred to all digits inclusive of left and right to decimal place keeping a note adding 0 to left of any number is not countable as significant digits whereas precise digits referred to digits that are only lying on the right side or in short after the decimal place in mathematics. In Java, there are numbers more than 16 numbers only to the precision but can go more. Here we are given a double value, the task is to set its precision value to specific decimal places. It is illustrated below illustrations as follows: Illustrations: Input : val = 1 Output : 1.0000 Upto 4 decimal placesInput : 12.5 Output : 12.500000 Upto 6 decimal places
We can use format() method of String class to format the decimal number to some specific format. Syntax: String.format("%.Df", decimalValue); // Where D is the number required number of Decimal placesExample-1:
Output 0.90000000000000000000 1.00000 From the above output, it is clear that precision of 20 digits is been carried out for the first entry whereas precision to 5 digits is carried out on input double value. Example-2:
Output 123.1235 GFG! Learning with G Example:
The above double number is precise to 7 digits which can easily be seen from the output generated. Article Tags :
In this article, we will see what is the problem in comparing floating-point numbers and we will discuss the correct way to compare two floating-point numbers.
Output: The numbers are not equal Why does this problem occur?
Output: a is : 0.99999999999999988898 b is : 1 Now we can see the internal rounding error in floating-point numbers. Number ‘a’ is not correctly rounded up to 1, there is an internal error in rounding up, a very small error but makes a huge difference when we are comparing the numbers. How to compare floating-point numbers correctly? If we do have to compare two floating-point numbers then rather than using “==” operator we will find the absolute difference between the numbers (which if were correctly represented, the difference would have been 0) and compare it with a very small number 1e-9 (i.e 10^-9, this number is very small) and if the difference is less than this number, we can safely say that the two floating-point numbers are equal.Example:
Output: The numbers are equal This code results in the correct output, so whenever two floating point numbers are two be compared then rather than using “==” operator, we will use the above technique. Article Tags : |