double d = 0.0;
for (int i = 0; i < 10; i++)
{
d = d+0.1;
}
System.out.println(d);
这是我在“最å°æƒŠå–œåŽŸåˆ™â€ä¸è¯»åˆ°çš„一个例å
我åªæ˜¯å¥½å¥‡ä¸ºä»€ä¹ˆä»£ç 会返回0.999999999,如果我将dçš„æ•°æ®ç±»åž‹æ›´æ”¹ä¸ºfloat,我得到1.0000001。这ç§è¡Œä¸ºèƒŒåŽçš„åŽŸå› æ˜¯ä»€ä¹ˆã€‚
ç”案 0 :(得分:7)
这是浮点数ä¸ç²¾ç¡®çš„ç»å…¸æ¡ˆä¾‹ã€‚由于0.1ä¸èƒ½ä»¥äºŒè¿›åˆ¶å½¢å¼å¹²å‡€åœ°è¡¨ç¤ºï¼ˆå®ƒæ˜¯ä¸€ä¸ªé‡å¤çš„æ•°å—ï¼‰ï¼Œå› æ¤éšç€æ•°å—被åå¤æ·»åŠ 到自身ä¸ï¼Œå˜åœ¨èˆå…¥è¯¯å·®ã€‚当我们改å˜æµ®åŠ¨æ—¶ï¼Œè¡Œä¸ºçš„差异æ°å¥½å½’结为在更多å˜å‚¨ä½çš„过程ä¸å®žé™…ä¿æŒ0.1的差异。
如果您需è¦å分精确的å进制数表示,BigDecimal类将很快æˆä¸ºæ‚¨æœ€å¥½çš„朋å‹ã€‚基于它如何在内部å˜å‚¨å°æ•°çš„细节而ä¸ä¼šæŸå¤±ç²¾åº¦ï¼Œè®¡ç®—å¯ä»¥ä¿æŒå…¶å®Œæ•´æ€§ã€‚