【问题标题】:Parsing integer with decimal points [duplicate]解析带小数点的整数[重复]
【发布时间】:2013-09-27 19:19:07
【问题描述】:

如何将下面的值解析为 int。我们在 java.math 中有任何特定的类吗?

       String string="500.0000000";

我尝试如下,它抛出数字格式异常。

       int x=Integer.parseInt(string).

问候,

拉吉

【问题讨论】:

  • 将其解析为 double 然后舍入为 int?
  • 整数不能保存十进制值,请改用 Double
  • 亨利所说的。但是,如果字符串(例如用户输入)包含 500.1000 或其他内容,您还必须定义要执行的操作。你是要舍入它,还是要拒绝它并让用户输入其他内容?

标签: java


【解决方案1】:

你可以在一行中解析它

String string="500.0000000";
int x = Double.valueOf(string).intValue();
System.out.println(x);

int x = (int)Double.parseDouble(str);

你会得到输出为

500

这里Double.valueOf(string) 将字符串解析为双精度值

使用.intValue();将解析的double值转换为int类型

【讨论】:

  • 请注意,Double.valueOf 创建了一个新的 Double 对象。 parseDouble() 是更好的选择。
  • @RohitJain ThanQ Rohit,我修改了我的答案:)
【解决方案2】:

将其解析为双精度,然后将其转换为整数:

String s = "500.0000000";
double d = Double.parseDouble(s);
int i = (int) d;

Java 将 double 转换为 int 的方式是它会删除小数部分。

【讨论】:

  • 甚至Double.valueOf(string).intValue();
【解决方案3】:

小数表示它不是整数。尝试将其解析为浮点数或双精度数:

float f = Float.parseFloat(string);

如果你需要它作为一个 int,你可以尝试强制转换它:

int x = (int)f;

【讨论】:

    【解决方案4】:

    您的主要问题是,您尝试将双精度值解析为 int。但是,如果您也需要它在其他国家/地区工作,这就是您所需要的:

    NumberFormat nf = NumberFormat.getNumberInstance( Locale.GERMANY );
    System.out.println( nf.parse( "100.0000000" ) ); // ->  1000000000
    
    nf = NumberFormat.getNumberInstance( Locale.US );
    System.out.println( nf.parse( "100.0000000" ) ); // -> 100
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 2016-10-19
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多