Precision getting wrong in dart, how to fix that? [duplicate] - dart

This question already has answers here:
Is floating point math broken?
(31 answers)
Closed 1 year ago.
My dart code:
main()
{
print("sample data");
print(700*0.002);
print(7000*0.002);
print(70*0.002);
}
The output:
sample data
1.4000000000000001
14.0
0.14
Why the output is different in case of 700?
How to fix that?

This is floating-point aliasing due to their IEEE 754 representation and not unique to dart
Python:
>>> 700*0.002
1.4000000000000001
Just display them with something float-aware and the precision will be right or move your math into an integer space

Related

Google Sheets Less than or equal (<=) provide wrong result [duplicate]

This question already has answers here:
Difference in value of two same time google Sheets [duplicate]
(1 answer)
Is floating point math broken?
(31 answers)
Why are floating point numbers inaccurate?
(5 answers)
Closed 8 months ago.
Formula 0<=(1.36*100/1.36)-100 returns FALSE while expects TRUE.
But
0<=(1.26*100/1.26)-100 returns correct result TRUE.
Why?
if you run:
=(1.36*100/1.36)-100
and expand decimal places you will get:
which is totally fine even if you do not expect such behavior. this is due to how google sheets stores the numbers and this "nonsense" is called "rounding error" (yet it is not an error)
see: https://stackoverflow.com/a/72230592/5632629
in your case try:
=0<=ROUND((1.36*100/1.36)-100)

How to format string to Decimal without losing precission? [duplicate]

This question already has answers here:
Is floating point math broken?
(31 answers)
Closed 2 years ago.
Lets take a look at this simple example
let formatter = NumberFormatter()
formatter.number(from: "0.945")?.decimalValue // result: 0.945
formatter.number(from: "0.94")?.decimalValue // result: 0.9399999999999999
How can I achieve that "0.94" converts to Decimal with exact same value e.g. 0.94?
I prefer solutions with NumberFormatter because I want to use this String to Decimal conversion also for amounts with currency, such as "$0.94" and "0.94€"
This website contains explanation. Basically, computers store these numbers using a system that can't represent them very accurately.
If you need to have better accuracy, I suggesting working with decimal types such as Decimal or NSDecimalNumber:
Decimal(string: "0.945")
Decimal(string: "0.94")

Can anyone explain why this comparison return true in ruby? [duplicate]

This question already has answers here:
Why does floating-point arithmetic not give exact results when adding decimal fractions?
(31 answers)
Closed 4 years ago.
I wrote this in rails console
(3352.3744333333334==3352.3744333333335) #true
and result was true
Notes:
I'm using ruby 2.4.0 and rails 5.0.1
I’m not an expert in ruby but my best answer is that the code is printing out all of the numbers but only comparing like the first 10 digits meaning 3352.374433 to 3352.374433 and it’s not going further than that. This would be the most logical explanation In my mind

Why is output of {42.05 + 0.05 } like this on Dart Lang? [duplicate]

This question already has answers here:
Is floating point math broken?
(31 answers)
Closed 1 year ago.
When i try this on DartPad output is like this. Anyone can explain ?
This is expected behavior. Double numbers cannot represent all decimal fractions precisely, and neither 0.05 nor 42.05 are the exact values that the double values represent.
The exact values are:
42.0499999999999971578290569595992565155029296875
0.05000000000000000277555756156289135105907917022705078125
If you add these two exact values, the result can yet again not be represented exactly as a double. The two closest representable doubles are:
42.099999999999994315658113919198513031005859375
42.10000000000000142108547152020037174224853515625
Of these, the former is closer to the correct result of the addition, so that is the double value chosen to represent that result.
This issue is not specific to Dart. All language using IEEE-754 64-bit floating point numbers will get the same result, and that is probably all languages with a 64-bit floating point type (C, C++, C#, Java, JavaScript, etc).

float unusual behaviour Objective c [duplicate]

This question already has answers here:
Trouble with floats in Objective-C
(3 answers)
Closed 7 years ago.
I am getting an unusal issue with float in Objective C. I enter 100.1 and i get 100.100002 shouldn't it be something like 100.100000 .
Following is the code
float temp=100.1;
NSLog(#"%f",temp);
100.100000
Can someone guide me what am i doing wrong or how to fix it ? I cannot use fixed decimal places i-e i cannot just use 100.10 . I need all decimal places .
Because that is a fundamental part of what happens when you represent an arbitrary floating point value in binary. The number of binary digits is limited, therefore rounding occurs. Depending on your needs, you might be better off using NSDecimalNumber.
Try using double instead;
double temp=100.1;
NSLog(#"%.8f",temp);
100.10000000
It is an issue with representation accuracy. I do not think it will be a problem to use double instead.

Resources