如何让Javascript中的MOD正确返回小数点?

如何让Javascript中的MOD正确返回小数点?,javascript,modulo,decimal,Javascript,Modulo,Decimal,我正在处理的一个简单问题是,以秒为单位进行300米跑需要一段时间,然后将它们转换为一个字符串,使其显示为“9:99.99”。为了获得秒数,我执行以下MOD操作: sec = result % 60; 除非小数部分为0.5(即60.5、75.5等),否则这不会按预期工作。任何其他十进制数都会给我一个结果,这个结果需要12+个有效数字来表示 例如,64.55%60的结果是4.549999999997 我知道一个简单的解决方案是在小数点上拆分,并将结果与小数点连接起来,但这让我很感兴趣。我做错了什么

我正在处理的一个简单问题是,以秒为单位进行300米跑需要一段时间,然后将它们转换为一个字符串,使其显示为“9:99.99”。为了获得秒数,我执行以下MOD操作:

sec = result % 60;
除非小数部分为0.5(即60.5、75.5等),否则这不会按预期工作。任何其他十进制数都会给我一个结果,这个结果需要12+个有效数字来表示

例如,64.55%60的结果是4.549999999997


我知道一个简单的解决方案是在小数点上拆分,并将结果与小数点连接起来,但这让我很感兴趣。我做错了什么?有没有一个好方法可以单独使用MOD来解决这个问题?

所以我们假设你的值是921.856秒

var value = 921.856;
var minutes = Math.floor(value/60),  // 15        
    seconds = value % 60,            // 21.856
    time = minutes + ":" + seconds.toFixed(2);  // 15:21.86
要在不舍入的情况下执行此操作:

time = minutes + ":" + (Math.floor(seconds * 100)/100).toFixed(2); // 15:21.85

所以我们假设你有一个921.856秒的值

var value = 921.856;
var minutes = Math.floor(value/60),  // 15        
    seconds = value % 60,            // 21.856
    time = minutes + ":" + seconds.toFixed(2);  // 15:21.86
要在不舍入的情况下执行此操作:

time = minutes + ":" + (Math.floor(seconds * 100)/100).toFixed(2); // 15:21.85

通常,浮点数不能精确转换。64.55内部为64.549999或类似值。如果您需要2位精度,请尝试
(6455%6000)/100)
阅读原因:有趣…我已经编程了大约10年,我想这可能是我第一次需要对浮点进行修改。是否所有其他语言都受到相同的限制,或者这只是Javascript的问题?这与底层浮点实现的工作方式有关,这通常是硬件问题。许多其他语言甚至不允许您对浮点数执行
%
操作,因为从数论的角度来看,这有点奇怪(然而,我对数论有一个幼儿水平的理解)。一般来说,浮点数无法准确转换。64.55内部为64.549999或类似值。如果您需要2位精度,请尝试
(6455%6000)/100)
阅读原因:有趣…我已经编程了大约10年,我想这可能是我第一次需要对浮点进行修改。是否所有其他语言都受到相同的限制,或者这只是Javascript的问题?这与底层浮点实现的工作方式有关,这通常是硬件问题。许多其他语言甚至不允许您对浮点数执行
%
操作,因为从数论的角度来看,这有点奇怪(不过,我对数论有着幼儿水平的理解)