我需要计算24位长整数(IBAN checksum)的模数,但JS计算错误。
例如为: 700901001234567890131400%97 = 90
但是在JS(V8)中它是38。
如何计算JS中的模数
答案 0 :(得分:7)
我认为您链接的文档已经说明了您应该做的事情:
如果使用的应用程序软件无法处理此大小的整数,则可以以分段方式执行模运算。
分段计算D mod 97可以通过多种方式完成。其中一种方法如下:
- 从D的最左边数字开始,使用前9位数字构建一个数字并将其称为N. [注3]
- 计算N mod 97。
- 通过将上面的结果(步骤2)与D的下一个7位数连接起来构造一个新的9位数N.如果D中剩余的数字少于7位但至少有一位,那么构造一个新的N,它将具有小于9位,从上面的结果(步骤2)开始,接着是D
的剩余数字- 重复步骤2-3,直到处理完D的所有数字 步骤2中的最终计算结果将是D mod 97 = N mod 97。
醇>
答案 1 :(得分:2)
它可能比人们想象的更难。 确保javascript句柄号为整数是非常棘手的(它通常将它们存储为float,但并非总是如此)。
其他人已经建立了库来处理JS中的IBAN检查。 例如,请查看https://github.com/arhs/iban.js。
答案 2 :(得分:1)
javascript中可以表示的最大数字是2 ^ 53 - 1.它们是64位浮点值。所以最大的数字是9007199254740991。
大于9007199254740991的数字不能以正常方式计算。因此,要找到这么大数量的模数,你必须把它分解成碎片。
例如。 700901001234567890131400可分为700901001234567和890131400。
首先找到700901001234567的模数。 700901001234567%97 = 13 现在加入第二个数字13890131400的13前面并找到这个数字的模数 13890131400%97 = 90
答案 3 :(得分:0)
我最近遇到过这个问题,这看起来像霍纳的方法[https://en.wikipedia.org/wiki/Horner%27s_method]
可以解决的问题<div class="fm-link-block__grid">
<div class="row">
<?php if( have_rows('home-section-modeling') ): ?>
<?php while( have_rows('home-section-modeling') ): the_row();
$home_section_modelling_image = get_sub_field('home-modeling-image');
$home_section_modelling_description = get_sub_field('home-modeling-description');
$home_section_modelling_title = get_sub_field('home-modeling-title');
?>
<div class="col-sm-4">
<div class="v-align-container">
<div class="v-align-grid">
<?php if( $home_section_modelling_description ): ?>
<p><?php echo $home_section_modelling_description ?></p>
<?php endif; ?>
</div>
</div>
</div>
<div class="col-sm-8">
<div class="fm-link-block-image">
<a href="#">
<?php if( $home_section_modelling_image ): ?>
<img alt="modelling-image" src="<?php echo $home_section_modelling_image['url']; ?>">
<?php endif; ?>
<h2>
<?php if( $home_section_modelling_title ): ?>
<span><?php echo $home_section_modelling_title ?></span>
<?php endif?>
<i>
<img alt="arrow icon" src="<?php echo get_stylesheet_directory_uri(); ?>/images/link-arrow.svg">
</i>
</h2>
</a>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
</div>
<div class="fm-link-block-head"> MODELLING </div>
</div>
除非我不完全理解这个问题,否则上面的代码应该有效。