我正在使用Java进行练习。我应该使用/
和%
从数字中提取数字。该数字类似于1349.9431
。输出将类似于:
1349.9431
1349.943
1349.94
1349.9
我知道这是一种奇怪的方法,但实验练习需要它。
答案 0 :(得分:7)
让我们考虑一下你所知道的。假设您的数字为12345.将12345除以10的结果是什么?服用12345 mod 10的结果是什么?
现在想想0.12345。将它乘以10的结果是什么?那个mod 10的结果是什么?
关键在于答案。
答案 1 :(得分:2)
如果x是你的数字,你应该能够做x - x%0.1以获得1349.9,然后x - x%.0.01得到1349.94等等。虽然我不确定,对浮动进行mod是一种不寻常的开始,但我认为它应该是这样的。
x - x%10肯定会让你获得1340和x - x%100 = 1300肯定。
答案 2 :(得分:1)
无论如何,这项工作将在后台完成,所以为什么要打扰,只需打印它。
float dv = 1349.9431f;
System.out.printf("%8.3f %8.2f %8.1f", dv, dv, dv);
或者,这可以存档:
float dv = 1349.9431f;
System.out.println(String.format("%8.3f %8.2f %8.1f", dv, dv, dv));
答案 3 :(得分:0)
这是一个家庭作业问题,因此不允许按照实际在现实世界中做的方式(即使用String的格式方法为Margus did)来做某事。鉴于您的问题中包含的内容,我可以看到任何答案的三个约束(如果这些实际上不是您需要重新设置问题的约束!)
约束1.总是很痛苦,因为如果你必须在小数点之前和之后使用四位数字,那么你很容易就能轻易掌握浮点精度。
float inputNumber = 1234.5678f;
System.out.println(inputNumber % 0.1);
打印“0.06774902343743147”
将输入float转换为double更令人头疼:
float one = 1234.5678f;
double two = (double) one;
打印“1234.5677490234375”(注意:四舍五入的答案会得到1234.5677,其中!= 1234.5678)
说实话,这让我真的很难过,我花了太多时间试图弄清楚如何解决精确问题。我找不到让这个程序适用于1234.5678f的方法,但它确实适用于提问者的值1349.9431f。
float input = 1349.9431f;
float inputCopy = input;
int numberOfDecimalPoints = 0;
while(inputCopy != (int) inputCopy)
{
inputCopy = inputCopy * 10;
numberOfDecimalPoints++;
}
double inputDouble = (double) input;
double test = inputDouble * Math.pow(10, numberOfDecimalPoints);
long inputLong = Math.round(test);
System.out.println(input);
for(int divisor = 10; divisor < Math.pow(10, numberOfDecimalPoints); divisor = divisor * 10)
{
long printMe = inputLong - (inputLong % divisor);
System.out.println(printMe / Math.pow(10, numberOfDecimalPoints));
}
在我的三个约束中,我满意1(种类),2但不满足3,因为它高度依赖于价值。
我很想知道其他SO人能想出什么。如果提问者正确地解释了说明,这是一个非常糟糕的练习,IMO。