小数,javascript和C#

前端之家收集整理的这篇文章主要介绍了小数,javascript和C#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将一个 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

使用完全相同的代码使用完全相同的输入生成C#

79957.88183577500452161331162
160933.02806113221197323204919
609.91112949900524507144149035

如果所有字符串的长度相同,这不是一个问题,但我不知道如何确定JS会生成较长的十进制.任何线索?注释?意见?

不幸的是,接收代码仍然是原始的JS,它只是简单的逆转过程,因此我必须完美地复制所有输入的最终结果.

编辑:

这是有问题的部分.不要问我为什么这样工作,我没写.

// 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数字(双精度).您获得相同的值(验证后更新).
原文链接:https://www.f2er.com/js/154991.html

猜你在找的JavaScript相关文章