• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java:为什么我不能用科学记数法声明整数类型?

用户头像
it1352
帮助8

问题说明

我可以很容易地一目了然地将2e15读成"两千万亿",但对于2000000000000000,我必须计算零,这需要更长的时间,可能会导致错误。

为什么不能使用文字声明intlong,如2e91.3e6?我知道10的负幂(如2e-3)或小于小数位数的10的幂(如1.0003e3)会产生浮点数,但为什么Java不允许这样的声明,而只是截断浮点部分,并在结果值不是整数的情况下发出温和警告?

这是一个糟糕的主意,有没有技术原因,或者这完全是类型安全的问题?对于编译器来说,简单地解析像

这样的语句不是很简单吗

long x = 2e12ASlong x = 2000000000000 //OK for long

int y = 2.1234e3ASint y = 2123.4 //warning: loss of precision

正确答案

#1

因为当您使用科学记数法时,您将创建a floating point number(在您的示例中为双精度)。并且不能将浮点赋给整数(这将是缩小基元转换,which is not a valid assignment conversion)。

因此这也不起作用,例如:

int y = 2d; //can't convert double to int

您有几个选项:

  • 将浮点显式转换为整数:int y = (int) 2e6;
  • 在Java 7 中使用千分隔符:int y = 2_000_000;

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /reply/detail/tancbg
系列文章
更多 icon
同类精品
更多 icon
继续加载