我想知道如何在Java中获取余数和商的单一值。
例子:
我应该得到1.5的值。
如果我使用/
运算符,我只得到商。如果我使用%
运算符,我只得到余数。如何同时在同一个变量中获取两者?
如果我使用/
运算符,我只得到商。如果我使用%
运算符,我只得到余数。如何同时在同一个变量中获取两者?
我想知道如何在Java中获取余数和商的单一值。
例子:
我应该得到1.5的值。
如果我使用/
运算符,我只得到商。如果我使用%
运算符,我只得到余数。如何同时在同一个变量中获取两者?
如果我使用/
运算符,我只得到商。如果我使用%
运算符,我只得到余数。如何同时在同一个变量中获取两者?
quotient = 3 / 2;
remainder = 3 % 2;
// now you have them both
在您的示例中,Java正在执行整数运算,四舍五入除法结果。
根据您的问题,您想要执行浮点算术运算。为此,至少其中一个术语必须被指定为(或转换为)浮点数:
指定浮点数:
3.0/2
3.0/2.0
3/2.0
转换为浮点数:
int a = 2;
int b = 3;
float q = ((float)a)/b;
或者 (huòzhě)
double q = ((double)a)/b;
请参阅Java陷阱:双倍和Java浮点数细节讨论浮点数和双倍。
你只需要将你的 int 或 long 变量包装在一个 BigDecimal 对象中,然后在其上调用 divideAndRemainder 方法。返回的数组将包含商和余数(按顺序)。
不用担心。在你的代码中,只要按照你提到的分别进行 / 和 % 操作,即使看起来效率不高也没关系。让 JIT 编译器去担心将这些操作合并为单个机器指令来获取商和余数(据我所知,它通常会这样做)。
我是说很简单。 把它设置为双倍。 所以我们说
double answer = 3.0/2.0;
System.out.print(answer);
If you initialize both the parameters as float
, you will sure get actual divided value.
For example:
float RoomWidth, TileWidth, NumTiles;
RoomWidth = 142;
TileWidth = 8;
NumTiles = RoomWidth/TileWidth;
答案:17.75。
int a = 3;
int b = 2;
float c = ((float)a)/b
你可以这样做,
int a = 3;
int b = 2;
int quotient = a / b;
int remainder = a % b;
在实数中获得商
System.out.println((double) a / b);
在整数之间得到商
System.out.println("Quotient: " + quotient);
System.out.println("Remainder: " + remainder);
得到实数商,使小数点后有一个数字。
System.out.println(a / b + "." + a % b * 10 / b);
注意:在最后一种方法中,它将不会将小数四舍五入。
@recursive s solusion(被接受的答案)是100%正确的。 我只是为您提供一个样本代码供参考。
我的情况是显示带有两位小数的价格。这是后端响应的一部分:"price": 2300, "currencySymbol": "CD", ...
。
这是我的帮助类:
public class CurrencyUtils
{
private static final String[] suffix = { "", "K", "M" };
public static String getCompactStringForDisplay(final int amount)
{
int suffixIndex;
if (amount >= 1_000_000) {
suffixIndex = 2;
} else if (amount >= 1_000) {
suffixIndex = 1;
} else {
suffixIndex = 0;
}
int quotient;
int remainder;
if (amount >= 1_000_000) {
quotient = amount / 1_000_000;
remainder = amount % 1_000_000;
} else if (amount >= 1_000) {
quotient = amount / 1_000;
remainder = amount % 1_000;
} else {
return String.valueOf(amount);
}
if (remainder == 0) {
return String.valueOf(quotient) + suffix[suffixIndex];
}
// Keep two most significant digits
if (remainder >= 10_000) {
remainder /= 10_000;
} else if (remainder >= 1_000) {
remainder /= 1_000;
} else if (remainder >= 100) {
remainder /= 10;
}
return String.valueOf(quotient) + . + String.valueOf(remainder) + suffix[suffixIndex];
}
}
这是我的测试类(基于Junit 4):
public class CurrencyUtilsTest {
@Test
public void getCompactStringForDisplay() throws Exception {
int[] numbers = {0, 5, 999, 1_000, 5_821, 10_500, 101_800, 2_000_000, 7_800_000, 92_150_000, 123_200_000, 9_999_999};
String[] expected = {"0", "5", "999", "1K", "5.82K", "10.50K", "101.80K", "2M", "7.80M", "92.15M", "123.20M", "9.99M"};
for (int i = 0; i < numbers.length; i++) {
int n = numbers[i];
String formatted = CurrencyUtils.getCompactStringForDisplay(n);
System.out.println(n + " => " + formatted);
assertEquals(expected[i], formatted);
}
}
}
请将您的输入转换成双精度并进行除法计算。