<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBScript: работаем с дробными числами]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1515&amp;type=atom" />
	<updated>2008-06-09T17:53:08Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=1515</id>
		<entry>
			<title type="html"><![CDATA[VBScript: работаем с дробными числами]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=11300#p11300" />
			<content type="html"><![CDATA[<p>При работе с числами с десятичной точкой &quot;в лоб&quot; можно нарваться на неприятности. Например, следующий скрипт может выдать &quot;не равно&quot;, что будет несколько неожиданно:<br /></p><div class="codebox"><pre><code>a = 5130.60
b = 7448.46
If a + b = 12579.06 Then
    WScript.Echo(&quot;равно&quot;)
Else
    WScript.Echo(&quot;не равно&quot;)
End If</code></pre></div><p>Десятичную дробь в двоичную часто нельзя перевести точно, поэтому при таком прямолинейном подходе всегда есть вероятность ошибки. Вышеприведённый скрипт может выдать неожиданный результат, потому что сумма <strong>a + b</strong> всегда может отличаться от <strong>12579.06</strong> на какую-то крохотную величину:<br /></p><div class="codebox"><pre><code>Wscript.Echo 5130.60 + 7448.46 - 12579.06</code></pre></div><p>Чтобы избежать таких ситуаций, можно оценивать разницу величин &quot;a + b&quot; и &quot;12579.06&quot; - если она достаточно мала, то всё хорошо:<br /></p><div class="codebox"><pre><code>a = 5130.60
b = 7448.46
If Abs(a + b - 12579.06) &lt; 0.001 Then
    WScript.Echo(&quot;равно&quot;)
Else
    WScript.Echo(&quot;не равно&quot;)
End If</code></pre></div><p>Но проще и понятнее всего вовремя округлять числа:<br /></p><div class="codebox"><pre><code>a = 5130.60
b = 7448.46
If Round(a + b, 2) = 12579.06 Then
    WScript.Echo(&quot;равно&quot;)
Else
    WScript.Echo(&quot;не равно&quot;)
End If</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-06-09T17:53:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=11300#p11300</id>
		</entry>
</feed>
