假设我们有双重值12345.6789(应该是动态的)
现在要求是将数字拆分并得到小数位数和小数位数,这将是:
double number = 12345.6789;
int decimal = 12345;
int fractional = 6789;
我得到了小数部分,但是你能不能给出小数部分的提示?非常感谢.
ior*_*vic 28
double number = 12345.6789; // you have this
int decimal = (int) number; // you have 12345
double fractional = number - decimal // you have 0.6789
这里的问题是小数部分不是在内存中写成"0.6789",而是可能有某些"偏移",可以这么说.例如0.6789可以存储为0.67889999291293929991.
我认为你的主要关注点不是获得小数部分,而是获得具有一定精度的小数部分.
如果您想获得分配给它的确切值,您可能需要考虑这个(虽然,这不是一个干净的解决方案):
String doubleAsText = "12345.6789";
double number = Double.parseDouble(doubleAsText);
int decimal = Integer.parseInt(doubleAsText.split("\.")[0]);
int fractional = Integer.parseInt(doubleAsText.split("\.")[1]);
但是,正如我所说,这不是最有效和最干净的解决方案.
你不能以一种精确的方式做你想做的事.
一个问题是,如果你有数字1.05应该是什么结果?
double number = 1.05;
int decimal = 1;
int fractional = 5; // Oops! "1.05" and "1.5" give the same result.
这个怎么样?
int fractional = 05; // Still not correct. This is an octal number.
另一个问题是double类型无法准确表示12345.6789.它存储的数字略有不同.这称为表示错误.所以小数部分实际上不是6789.相反,你可以将它四舍五入到一些小数位.
int fractional = (int)Math.round((number - decimal) * 1000);
| 归档时间: | 
 | 
| 查看次数: | 47354 次 | 
| 最近记录: |