所以我正在分割显示器的宽度,这导致数字不那么干净。
我目前的解决方案是放弃右侧并将其用作填充以生成切片。
例如,如果我得到数字336.75
(1366监视器减去滚动条除以4)
在将数字转换为字符串之后,我使用split方法将其拆分。
问题是我无法让右侧再次出现小数。
使用:
var testNumber = 336.75,
numString = testNumber.toString(),
numParts = numString.split('.'),
numLeft = numParts[0],
numRight = numParts[1];
如果我尝试将右侧桥接到这样的小数:
var newNum = parseInt('.'+numRight);
我得到了NaN的结果。
我希望获得0.75
个数字并将其用作填充。
由于缺少小数点缺失,现在好像.75
是数字75
。
parseFloat似乎有用
答案 0 :(得分:2)
嗯,如果您使用parseFloat()
(参见此jsFiddle),您尝试过的确实有效,但是有更好,更有效的方式来实现您的目标#&# 39;重新尝试做。
您可以通过向下舍入testNumber
并从自身中减去填充值来轻松获得填充值。您可以使用Math.floor()
为您完成大部分繁重工作:
var testNumber = 336.75,
padding = testNumber - Math.floor(testNumber); // padding == 0.75
获取号码的modulus也是可能的,但可能性较差:
var testNumber = 336.75,
padding = testNumber % 1; // padding == 0.75
答案 1 :(得分:2)
更简单:
var testNumber = 336.75;
var padding = testNumber % 1; // 0.75
修改强>
根据评论中的讨论,一个有趣的(也是令人讨厌的)问题是看到简单的浮点数学导致12位数的长结果。
例如,取2.3
,我们希望从中获取0.3
2.3 % 1 = 0.299999999998
......什么?!
另一个答案的解决方案也是如此:
2.3 - Math.floor(2.3) = 0.29999999998
.... :(
这似乎与浮点值的物理存储方式有关。 请查看此信息以获取更多信息: Is floating point math broken?
作为最终解决方案,您可以使用toFixed(n)
:
(2.3 % 1).toFixed(4); // "0.3000"
或者作为数字而不是字符串:
parseFloat((2.3 % 1).toFixed(4)); // 0.3
虽然合法地有超过4位小数的数字会丢失一点精确度:2.3456789 -> 2.3457