![]() |
Delphi-Version: 2010
Count digits after point
I need to know how many digits has float number after point.
Delphi-Quellcode:
Working good in most cases, but not for all :o
function CountDigitsAfterPoint(AValue: Extended): Byte;
begin Result := 0; while (Frac(AValue) <> 0) do begin Inc(Result); AValue := AValue * 10; end; end; Incorect results for sample data: 2.048 --> 19 8.448 --> 19 565.148 --> 17 32.064 --> 18 274.176 --> 17 97.728 --> 17 155.52 --> 17 622.08 --> 17 :shock: Please help :( |
AW: Count digits after point
That is because there are some inaccuracy regarding non-integer numbers.
0.99999999999999999999.... is equal to 1! (or your example: 2.048 could internally be 2.04799999999999999...) Therefore your method needs to take that into account. But sadly I have no idea since my knowledge about precision is not good. Someone else might be of help! Edit: Another problem that came to mind is irrational numbers. I thought Id mention it but it shouldnt be too problematic since the data-type cuts off after a certain degree of precision.. |
AW: Count digits after point
Hi,
maybe that'll help:
Code:
decimalplaces := (length(floattostr(number)) - pos(',',floattostr(number))-1);
|
AW: Count digits after point
@DelphiProgrammer:
Nope!
Delphi-Quellcode:
Output
var
x: Single; begin x := 2.048; writeln(x); writeln((length(floattostr(x)) - pos('.',floattostr(x))-1)); readln; end.
Code:
2.04800009727478E+0000
15 |
Re: Count digits after point
I thought about strings too, but (1) it's lame and (2) see @Aphton's post.
There is no math solution? :( |
AW: Count digits after point
This might be a problem that can be solved in another way.
You want to find out the number of fraction-digits. Why? Maybe the root problem you are trying to solve can be solved in another way! Maybe you dont even need to find out the digitcount! |
AW: Count digits after point
Why you need the number of digits? perhaps there is a better way to achieve your aim.
|
AW: Count digits after point
@mkinzler: xDD
|
Re: Count digits after point
So, reason is not important. Important is problem.
But if you want to know: (1) result is required for further computation purposes and (2) for formating. :) |
AW: Count digits after point
For (1) because the system iminent computation error the consumption more digits are better doesn't seem right to me.
For (2) I'd prefer to restrict the digits to dispay to a fixed count |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz