Double 대 FLOAT - 이해할 수 없는 MathFloor 오류 - 페이지 3

 

Print()를 사용하여 저널에 인쇄할 때 정규화된 숫자는 예상보다 더 많은 소수 자릿수를 포함할 수 있습니다. 예를 들어,

그런 다음 댓글에서 같은

 
fxsaber :
#define TOSTRING(A) #A + " = " + ( string )(A) + " "

void OnStart ()
{
   double Price1 = 105143 ;
   double Price2 = Price1 - 1 e- 11 ;

   Print (TOSTRING(Price1) + TOSTRING( MathFloor (Price1)) +
        TOSTRING(Price2) + TOSTRING( MathFloor (Price2)) +
        TOSTRING(Price1 > Price2));
}
결과
Price1 = 105143.0 MathFloor (Price1) = 105143.0 Price2 = 105143.0 MathFloor (Price2) = 105142.0 Price1>Price2 = true
문자 그대로 이중 숫자를 인쇄하지 마십시오.

고맙습니다. 나는 아마도 여전히 올바른 해결책을 찾았을 것입니다. 그러나 잘못된 인쇄로 인해 실수로 죄를 지었습니다.!

 

하나의 비정규화 숫자를 다른 비정규 숫자 로 나눈 나머지 결과는 어쨌든 비정규화됩니다.

일반적으로이 기능은 약한 정신을 다치게하지 않도록 언어에서 제거되어야합니다.

 
Vladislav Andruschenko :

어쩌면 내가 올바른 해결책을 찾았을 수도 있습니다

불행히도, 당신의 코드는 당신이 하고 있는 일에 대한 완전한 이해 부족을 보여줍니다. 문제를 이해하려고 노력하십시오.
 
Dmitry Fedoseev :

하나의 비정규화 숫자를 다른 비정규 숫자 로 나눈 나머지 결과는 어쨌든 비정규화됩니다.

일반적으로이 기능은 약한 정신을 다치게하지 않도록 언어에서 제거되어야합니다.

그래서 모든 것이 정상으로 돌아왔습니다. 그게 내가 먹는 재미입니다.
 
Vladislav Andruschenko :
그래서 모든 것이 정상으로 돌아왔습니다. 그게 내가 먹는 재미입니다.
캐릭터를 잃게 만드는 불필요한 변형을 하고 있습니다.

계산 결과를 직접 사용하기 전에만 정규화를 수행하십시오. 그 전에는 가능하면 모든 숫자 캐스팅 및 변환을 피하십시오.
 
Andrey Dik :
표지판을 잃게 만드는 불필요한 변형을 하고 있습니다.
이미 필사적인 코드들입니다.....별도의 방법으로 해봤습니다. 그러나 위에서 말했듯이. 아마도 잘못 받아 들여서 실수로 죄를 지었습니다. 코드에서 이러한 변수에는 결함이 있습니다.

여러분의 도움과 제안에 감사드립니다. 그러나 float를 사용하면 모든 것이 잘 작동합니다.
 
Vladislav Andruschenko :
float를 사용하면 모든 것이 잘 작동합니다.
최악의 권장 사항 중 하나는 이중에서 부동으로 전환하는 것입니다.
 
Vladislav Andruschenko :
그래서 모든 것이 정상으로 돌아왔습니다. 그게 내가 먹는 재미입니다.
어떤 알려지지 않은 곳에서 정규화됩니까?
 
Vladislav Andruschenko :
이미 필사적인 코드들입니다.....별도의 방법으로 해봤습니다. 그러나 위에서 말했듯이. 아마도 잘못 받아 들여서 실수로 죄를 지었습니다. 코드에서 이러한 변수에는 결함이 있습니다.

여러분의 도움과 제안에 감사드립니다. 그러나 float를 사용하면 모든 것이 잘 작동합니다.
float는 이점이 없는 숫자의 거세입니다. 변환의 모든 손실을 더 잘 처리하고 가능한 가장 높은 정밀도인 double을 사용합니다.