<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: работаем с дробными числами]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=1515</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=1515&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: работаем с дробными числами».]]></description>
		<lastBuildDate>Mon, 09 Jun 2008 17:53:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBScript: работаем с дробными числами]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=11300#p11300</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 09 Jun 2008 17:53:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=11300#p11300</guid>
		</item>
	</channel>
</rss>
