我正在尝试将 JavaScript 散列函数转换为 C# 散列函数以执行完全相同的操作。我已经完成了 99%,但我遇到了这个自定义函数中使用的小数点的问题。
我不确定为什么,但是这个函数出于某种奇怪的原因将散列值转换为小数,我的问题是生成的小数并不总是相同的长度。 C# 中的小数点要长一些,但长度是统一的。我遇到的问题是因为 C# 中的舍入与 JavaScript 中的舍入工作方式不同 我不知道要舍入多少小数来创建等效长度的字符串。
下面是两个生成的相互附加的十进制字符串的示例。都是从 4,4 和 3 个字符串开始的:
4 char string generates 79957.88183577501 4 char string generates 160933.02806113224 3 char string generates 609.9111294990053
Using the exact same code C# generates using the exact same inputs:
79957.88183577500452161331162 160933.02806113221197323204919 609.91112949900524507144149035
If all strings were the same length it would not be a problem but I have no idea how to determine when JS will generate the longer decimal. Any clues? Comments? Opinions?
Unfortunately the receiving code is still the original JS which simply reverses the process hence I have to duplicate the end result perfectly for all inputs.
EDIT:
Here is the problematic section. Don't ask me why it works like that, I didn't write it.
// oString is a full string to be encoded
// oKey is a key to be used for encoding
function completeHash(oString,oKey) {
if( oKey.length < 5 ) {
window.alert( 'The key must be at least 5 characters long' );
return oString;
}
var oKeyNum = new Array(), oOutStr = '', oOp = new Array('+=','/=','-=','*= 0.01 *');
for (var x = 0; x < oKey.length; x++) {
oKeyNum[x] = parseInt('0x' + completeEscape(oKey.charAt(x)));
}
for( var x = 0, y = ''; x < oString.length; x += Math.round( oKey.length / 2 ), y = 'O.O' ) {
var theNum = parseInt( '0x' + completeEscape( oString.substr( x, Math.round( oKey.length / 2 ) ) ) );
// next two lines are problematic with decimals not having equal length
for( var z = 0; z < oKey.length; z++ ) {
eval( 'theNum ' + oOp[z % 4] + ' ' + oKeyNum[z] + ';' );
alert('theNum:' + theNum);
}
oOutStr += y + theNum;
}
return oOutStr;
}
completeEscape() 函数简单地返回每个字符的 ASCII int 代码。
除了小数点的长度,我让整个事情都很好地工作。
最佳答案
如果您在 javascript 中使用 Number,则在 C# 中使用 double。两者都是 64 位 IEEE 754 数字( double )。您得到相同的值(在验证后更新)。
关于c# - 小数,javascript 与 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040204/
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用
什么是Linq聚合方法的ruby等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion几年前我去学校学习编程,毕业后我找到了一份系统管理方面的工作,这就是我职业生涯的方向。我想重新开始某种开发,并且一直在“玩”C#和ASP.NET,但我已经听到很多关于其他"new"语言的讨论(新的意思是它们是新的)我)喜欢Ruby和F#。我想我想知道我是否在浪费时间学习主要的MS语言,而不是成为一名通才。很长一段时间没有离开开发社区(如果我曾经离开过的话)让我在潮流中挣扎,我不想落在时代的
我正在我的应用程序中存储成本。成本未在数据库中格式化。例如:00.00存为0,1.00存为1,40.50存为40.5我需要从数据库中读取这些值并将它们转换为表示美元和美分的字符串。例如:0-->cost_dollars="00"&cost_cents="00",1-->cost_dollars="01"&cost_cents="00",40.5-->cost_dollars="40"&cost_cents="50".在rubyonrails中有没有一种简单的方法可以做到这一点?或者有人有执行此操作的代码吗?谢谢! 最佳答案 您可