質問編集履歴

2

更に追記しました。

2021/11/01 08:04

投稿

ntsk2543
ntsk2543

スコア4

test CHANGED
File without changes
test CHANGED
@@ -218,7 +218,31 @@
218
218
 
219
219
  ```
220
220
 
221
-
221
+ 更に追記:コメントでご教示いただきましたが上のコードはまどろっこしいです。
222
+
223
+
224
+
225
+ ```Cython
226
+
227
+ def test_round():
228
+
229
+
230
+
231
+ cdef int i
232
+
233
+ cdef float a
234
+
235
+ a=3.0
236
+
237
+ for i in range(1000):
238
+
239
+ print(round(a*1000)/1000)
240
+
241
+ a=a+0.001
242
+
243
+ ```
244
+
245
+ これで同じ出力が得られました。
222
246
 
223
247
 
224
248
 

1

追記しました。

2021/11/01 08:04

投稿

ntsk2543
ntsk2543

スコア4

test CHANGED
File without changes
test CHANGED
@@ -156,6 +156,72 @@
156
156
 
157
157
 
158
158
 
159
+ 追記:1000を掛けて四捨五入を行い、整数にしたあとで1000で割ればいいようです。
160
+
161
+ Pythonで使用可能なDecimalはCythonでも使用可能みたいです。
162
+
163
+
164
+
165
+ ```Cython
166
+
167
+ from decimal import Decimal, ROUND_HALF_UP
168
+
169
+ def test_round():
170
+
171
+
172
+
173
+ cdef int i
174
+
175
+ cdef float x,b
176
+
177
+ x=3.0
178
+
179
+ for i in range(1000):
180
+
181
+ b=x
182
+
183
+ b=b*1000
184
+
185
+ y = Decimal(str(b))
186
+
187
+ a = y.quantize(Decimal('0'), rounding=ROUND_HALF_UP)
188
+
189
+ a=a/1000
190
+
191
+ print(a)
192
+
193
+ x=x+0.001
194
+
195
+ ```
196
+
197
+ ```
198
+
199
+ 3
200
+
201
+ 3.001
202
+
203
+ 3.002
204
+
205
+ 3.003
206
+
207
+ 3.004
208
+
209
+ 3.005
210
+
211
+ 3.006
212
+
213
+ 3.007
214
+
215
+
216
+
217
+ ・・・
218
+
219
+ ```
220
+
221
+
222
+
223
+
224
+
159
225
  ### 補足情報(FW/ツールのバージョンなど)
160
226
 
161
227
  Python 3.9.4