GVKun编程网logo

在 Java 中安全地将 long 转换为 int(java把long转化为int)

10

针对在Java中安全地将long转换为int和java把long转化为int这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c–如何安全地将`unsignedlongint`转换为`int`

针对在 Java 中安全地将 long 转换为 intjava把long转化为int这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展c – 如何安全地将`unsigned long int`转换为`int`?、c# – 为什么我可以安全地转换为int而不是转换为int?、C++ 安全有效地将 std::weak_ordering 转换为 int、Dask:不能安全地将非等效的 float64 转换为 int64,但只有 object 和 int64 列等相关知识,希望可以帮助到你。

本文目录一览:

在 Java 中安全地将 long 转换为 int(java把long转化为int)

在 Java 中安全地将 long 转换为 int(java把long转化为int)

在 Java 中验证从longto的转换int不会丢失任何信息的最惯用的方法是什么?

这是我目前的实现:

public static int safeLongToInt(long l) {    int i = (int)l;    if ((long)i != l) {        throw new IllegalArgumentException(l + " cannot be cast to int without changing its value.");    }    return i;}

答案1

小编典典

Java 8 添加了一个新方法来做到这一点。

import static java.lang.Math.toIntExact;long foo = 10L;int bar = toIntExact(foo);

在溢出的情况下会抛出一个ArithmeticException

看:Math.toIntExact(long)

Java 8 中添加了其他几种溢出安全方法。它们以 exact 结尾。

例子:

  • Math.incrementExact(long)
  • Math.subtractExact(long, long)
  • Math.decrementExact(long)
  • Math.negateExact(long),
  • Math.subtractExact(int, int)

c – 如何安全地将`unsigned long int`转换为`int`?

c – 如何安全地将`unsigned long int`转换为`int`?

我有一个应用程序,它以无符号长整数的形式创建唯一的ID.该应用程序需要这种精度.

但是,我必须使用仅允许int的协议发送这些ID.接收应用程序 – 协议 – 不需要这种精度.所以我的问题是:如何将unsigned long int转换为int,尤其是当unsigned long int大于int时?

编辑:

该协议仅支持int.我很高兴知道如何避免“翻车问题”

发送消息的应用程序需要长时间知道唯一性,而接收者只需要在很短的时间内知道唯一性.

解决方法

这是一种可能的方法:
#include <climits>
unsigned long int uid = ...;
int abbreviated_uid = uid & INT_MAX;

例如,如果int是32位,则丢弃除UID的低位31位之外的所有位.它只会产生非负值.

这会丢失原始uid的信息,但您表示这不是问题.

但是你的问题很模糊,很难说这是否符合你的目的.

c# – 为什么我可以安全地转换为int而不是转换为int?

c# – 为什么我可以安全地转换为int而不是转换为int?

为什么这样做:

ComboBox cb = sender as ComboBox;
int validSelection = Convert.ToInt32(cb.Tag);
if (cb.Selectedindex != validSelection) {
    cb.Selectedindex = validSelection;
}

…但是这个:

ComboBox cb = sender as ComboBox;
int validSelection = (int)cb.Tag; // <-- fails
if (cb.Selectedindex != validSelection) {
    cb.Selectedindex = validSelection;
}

…错误输出“对象未设置为对象的引用”?

解决方法

那是因为 a conversion is not the same thing as a cast.

cb.Tag可能是一个字符串,而不是一个int,一个不能直接转换为另一个. Convert.ToInt32()实际上解析字符串并使用转换后的值创建一个新的int.

强制转换仅尝试将类型的实例解释为另一种类型的实例.

C++ 安全有效地将 std::weak_ordering 转换为 int

C++ 安全有效地将 std::weak_ordering 转换为 int

是否有更好的解决方案可以保证有效?

没有

该标准没有指定排序类的内容或表示。 Barry 的回答基于合理的假设,这些假设可能成立,但不能保证。

如果你需要它,最好的办法是写一些像你最后一个片段一样的东西

constexpr int ordering_as_int(std::weak_ordering cmp) noexcept {
    return (cmp < 0) ? -1 : ((cmp == 0) ? 0 : 1);
}
,

如何将 std::weak_ordering 转换为 int 以便在 qsort 等函数中使用?

简单的答案是:不要使用qsort,使用std::sort,它无论如何都会表现得更好。


也就是说,我们知道 std::weak_ordering 必须有一些整数类型成员,而 C++20 确实提供了将其拉出的机制:std::bit_cast

static_assert(std::bit_cast<int8_t>(0 <=> 1) == -1);

规则是您要转换到的类型(在本例中为 int8_t)必须与您要从中进行转换的类型(在本例中为 std::strong_ordering)的大小相同。这是对 bit_cast 的约束,所以它是安全的 - 如果实现实际上存储的是 int 而不是 int8_t,这将无法编译。

所以更一般地说,您必须编写一个简短的元程序来确定要强制转换的正确有符号整数类型。


请注意,虽然 weak_orderingstrong_ordering 将仅实现为存储整数(尽管不是标准中所示的 int),但 partial_ordering 可能会被实现为存储一个 int 和一个 bool - 它可能仍然被实现为单个整数。所以这个技巧是行不通的。

Dask:不能安全地将非等效的 float64 转换为 int64,但只有 object 和 int64 列

Dask:不能安全地将非等效的 float64 转换为 int64,但只有 object 和 int64 列

如何解决Dask:不能安全地将非等效的 float64 转换为 int64,但只有 object 和 int64 列?

我尝试阅读和处理 60 列 (150MB) 的 CSV 文件:

 df = dataframe.read_csv(
            path,**dialect,dtype=dtype,encoding=encoding,storage_options=storage_options,)

但是当我尝试 len(df) 时,它会引发 TypeError: cannot safely cast non-equivalent float64 to int64

但是,在 dtype 中,我只为我的列定义指定了 Int64object 类型。

这个浮点转换从何而来?

编辑:经过调查,问题与定义为 int 的列有关,其中包含(在 CSV 中很远)一些字符串值。错误显然不明确

编辑:堆栈跟踪

Traceback (most recent call last):
  File "/home/benjamin/try/try-back/apps/data/tasks.py",line 168,in csv_to_parquet_task
    df.to_parquet(
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/dataframe/core.py",line 3974,in to_parquet
    return to_parquet(self,path,*args,**kwargs)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/dataframe/io/parquet/core.py",line 508,in to_parquet
    out = out.compute(**compute_kwargs)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/base.py",line 167,in compute
    (result,) = compute(self,traverse=False,**kwargs)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/base.py",line 452,in compute
    results = schedule(dsk,keys,**kwargs)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/threaded.py",line 76,in get
    results = get_async(
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/local.py",line 486,in get_async
    raise_exception(exc,tb)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/local.py",line 316,in reraise
    raise exc
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/local.py",line 222,in execute_task
    result = _execute_task(task,data)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/core.py",line 121,in _execute_task
    return func(*(_execute_task(a,cache) for a in args))
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/core.py",in <genexpr>
    return func(*(_execute_task(a,cache) for a in args))
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/dask/dataframe/io/csv.py",line 150,in pandas_read_text
    df = reader(bio,**kwargs)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/io/parsers.py",line 688,in read_csv
    return _read(filepath_or_buffer,kwds)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/io/parsers.py",line 460,in _read
    data = parser.read(nrows)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/io/parsers.py",line 1198,in read
    ret = self._engine.read(nrows)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/io/parsers.py",line 2157,in read
    data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx",line 847,in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx",line 862,in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx",line 941,in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx",line 1073,in pandas._libs.parsers.TextReader._convert_column_data
  File "pandas/_libs/parsers.pyx",line 1104,in pandas._libs.parsers.TextReader._convert_tokens
  File "pandas/_libs/parsers.pyx",line 1182,in pandas._libs.parsers.TextReader._convert_with_dtype
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/core/arrays/integer.py",line 385,in _from_sequence_of_strings
    return cls._from_sequence(scalars,dtype,copy)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/core/arrays/integer.py",line 378,in _from_sequence
    return integer_array(scalars,copy=copy)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/core/arrays/integer.py",line 160,in integer_array
    values,mask = coerce_to_array(values,line 275,in coerce_to_array
    values = safe_cast(values,copy=False)
  File "/home/benjamin/.cache/pypoetry/virtualenvs/try-dKznE2K2-py3.8/lib/python3.8/site-packages/pandas/core/arrays/integer.py",line 179,in safe_cast
    raise TypeError(
TypeError: cannot safely cast non-equivalent float64 to int64

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于在 Java 中安全地将 long 转换为 intjava把long转化为int的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c – 如何安全地将`unsigned long int`转换为`int`?、c# – 为什么我可以安全地转换为int而不是转换为int?、C++ 安全有效地将 std::weak_ordering 转换为 int、Dask:不能安全地将非等效的 float64 转换为 int64,但只有 object 和 int64 列的相关信息,请在本站寻找。

本文标签: